2010-03-19 3 views
2

Я сделал небольшую игру Shooter с двумя кораблями, стреляющими друг в друга. Я использовал методы paintComponent для рисования или перемещения объекта, но по какой-то причине он работал с другой скоростью на каждом компьютере.Java3D проблема с получением времени

Я искал решение и внесло некоторые изменения в свою игру, такие как рисование и перемещение объектов в потоке. Теперь он работает с одинаковой скоростью на каждом компьютере. Также, если я изменю размер. Но проблема в том, что я использовал J3DTimer.getValue().

Для использования этой библиотеки я загрузил Java3d. Если компьютер не имеет этой библиотеки или установки, моя игра не работает. Как я могу решить эту проблему? Должен ли я сказать всем, чтобы установить Java ##? :))

Также я попытался использовать стандартный System.currentTimeMillis(), но тогда моя игра работает очень медленно ... Любые идеи?

ответ

2

Начиная с Java 1.5 существует метод под названием System.nanoTime(), который, как правило, намного точнее, чем System.currentTimeMillis() (в зависимости от возможностей базового оборудования).

0 думаю, System.nanoTime() должен быть заменой на J3DTimer.getValue(). Таким образом, вы удаляете свою зависимость от библиотеки Java3D.

+0

Я использовал вместо таймера J3D, но с той же конфигурацией моего потока нити J3D работал плавно, но теперь на экране мои строки имеют несколько щелчков. Я не получаю то же значение от J3DTimer.getValue() и System.nanoTime ()? Если есть какие-то отличия, что это такое? Я могу изменить метод Thread.sleep с этим значением – Ercan

+0

Я только что загрузил исходный код Java3D с https://java3d.dev.java.net и посмотрел на 'J3DTimer.getValue()'. Метод в основном является оболочкой для 'System.nanoTime()' в любом случае (по крайней мере, в версии 1.5.2 Java3D). Я не уверен, как изменение между ними может повлиять на поведение вашего приложения. – Ash

Смежные вопросы