0 / 0 / 0
Регистрация: 15.07.2019
Сообщений: 9
|
|||||||||||||||||||||
1 | |||||||||||||||||||||
Объект двигается слишком быстро keyPressed\keyReleased19.10.2020, 17:48. Показов 860. Ответов 4
Приветствую!
Нашел сайт про LibGDX, но решил разобраться вначале на более простых примерах с графикой и попытками создать что-то свое. Статья "Создание игры на Java" на medium.com была быстро перекатана в IDE и все бы ничего, если не фигурка, которая перемещается со скоростью света. "Друг", прикрепленный в миниатюре, должен перемещаться на 1 единицу. А он улетает с бешенной скоростью в конец экрана(раньше за пределы его. Потом, если удается, промелькнет пролетая обратно, может удастся затормозить в видимой области беспорядочно тыкая стрелки <-\->). Вот код keyPressed\keyReleased - вроде все как у всех. в консоль пишет: Left TRUE! и тут же Left FALSE! - т.е. отпускание обрабатывается! только фигурка уже э... улетела за 1000 пикселей\единиц вперед кудато. Что это? слишком быстрая отрисовка? т.е. между кратковременным нажатием и тут же отпусканием - происходит 1000 раз "x += 1"? Кликните здесь для просмотра всего текста
Вот метод update() - обновляет координаты. Кликните здесь для просмотра всего текста
Вот метод run() в котором update() вызывается перед отрисовкой render() long delta -почему то в статье не используется. Да и статья на этом оканчивается - но остальное можно скопипастить с других статей\примеров. Кликните здесь для просмотра всего текста
пробовал в update() в обновлении координат делать условие If (delta > 1) хотя бы - перемещается плавно, но только после отпускания стрелки влево фигурка продолжает двигаться влево столько, сколько накопилось событий видимо в "буфере" нажатий(?) и не реагирует на другое нажатие.(считай подвисла на какое-то время) Временно
(гугл подсказал вызывать System.currentTimeMillis() и смотреть разницу с последним "движением" х++; или с последним нажатием у keyPressed - ничего особо не вышло из этого)
0
|
19.10.2020, 17:48 | |
Ответы с готовыми решениями:
4
Не двигается объект при нажатии Почему у меня шар двигается так быстро ? Делаю игру про НЛО, персонаж двигается очень быстро Всё работает слишком быстро |
Модератор
2558 / 1094 / 375
Регистрация: 11.08.2017
Сообщений: 3,332
|
|
19.10.2020, 21:26 | 2 |
Скажу пару слов про libgdx, он использует старые версии библиотек, порой прилично старые, например lwjgl 2 версии которая уже legacy/deprecated (2015 год) когда уже везде используется 3 (не новая но новее, 2019 год). Эта библиотека отвечает за окно, графику, звук. Мне кажется можно получше движок выбрать, хотя libgdx обладает кроссплатформенностью (android ios web), например jmonkey engine.
А вообще игры писать на джаве не очень решение. В игре на чистой джаве можно обойтись без бесконечного цикла, либо вообще без, либо таймером например
1
|
0 / 0 / 0
Регистрация: 15.07.2019
Сообщений: 9
|
|
20.10.2020, 01:33 [ТС] | 3 |
alecss131
Спасибо за libgdx - с него я думал попробовать, но что-то установка АндроидСДК через студию + сам ЛибГДХ не внушили уверенности в первом шаге. lwjgl 2 - тоже натыкался, но по libgdx есть туториал на сайте пошаговый к простенькой игрушке. про lwjgl 2 пока ничего не слышал. ---------------------------------------------------------------------- В итоге - полазил по форуму, нашел упоминание в похожей проблеме - забей и поставь Thread.sleep(1000) - что слишком много для меня, пока обхожусь 30 мс. Воткнул задержку в метод run(), после render'a поставил. И вроде стало терпимо в плане дерганья, шаг движения остановил на 4 ед. Раскидал все по классам так, как умею, это я и хотел, посмотреть что получится на простеньком примере, а не с пошаговой инструкцией в руках. По идее надо как-то переделывать задержку потока на таймер, тоже читал про это где-то. Ну и добавлять логики взаимодействия с объектами. Пока у меня просто чувак с ведром носится. Типа капли собирает )))) прикрепил GIF'ку ниже...
0
|
Модератор
2558 / 1094 / 375
Регистрация: 11.08.2017
Сообщений: 3,332
|
|
20.10.2020, 10:55 | 4 |
А зачем вам андроид студио? Если хотите писать под андроид то изучайте сразу андроид. В случае с андроидом swing/awt а так же lwjgl в пролете, так как у него своя система графики, там вроде даже не нужен цикл/таймер, так как есть уже готовый метод вызываемый постоянно.
Вот 2DGameBox.7z пример игры на lwjgl 3 (opengl 4.5) + box2d (физический движок из angry birds), я только особо не настраивал физику, потому так все странно)) LWJGL это по сути графическая библиотека (для пк только), и кучу всего придется писать самому, например всю отрисовку графики (включая выгрузку геометрии и текстур на видеокарту и вызовы отрисовки). В этом проекте у меня используется довольно стандартный скелет игр (не только на джаве, на любом языке используя графические апи). По lwjgl могу порекомендовать разве что уроки по opengl/vulkan на других языках, так как lwjgl это по сути привязка этих апи к джаве и все.
0
|
296 / 149 / 67
Регистрация: 22.02.2017
Сообщений: 592
|
|
21.10.2020, 09:10 | 5 |
движок 2D платформера на чистом java (уровни, мобы, боссы, анимация, диалоги)
Java самодостаточный язык для игр, там есть все что нужно
0
|
21.10.2020, 09:10 | |
21.10.2020, 09:10 | |
Помогаю со студенческими работами здесь
5
Перерисовка в while выполняется слишком быстро Слишком быстро работает DosBox Слишком быстро уходит окно вывода MediaPlayer, слишком быстро воспроизводится видео Ноутбук слишком быстро разряжается от игр Что то Яша слишком быстро клеит Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |