ВРЕМЯ В игре: Есть ли способ использовать другое, чем System.Currentmillis () - время начала> XX, чтобы обновить что-либо в игре?Это безопасно или дорого процессор?
Вы должны использовать систему дельта времени.Есть много уроков по этому поводу.Это очень хороший урок: deWiTTERS Game Loop .
В моей игре у меня 20 предметов (движущиеся квадратные вершины), когда получается 60-70 вершин,FPS падает до 30-40 FPS, с 60 FPS.(тестирование на телефоне galaxy S i9000).Есть ли способ, чтобы моя игра FPS была 30FPS?Это хорошо для обновления моей игры до 30 FPS, или мне не нужно справляться с этим?(потому что на низких FPS будет отставание - оно будет медленным)
Это зависит от того, какой метод вы используете.Если 3D, вы должны рассмотреть возможность использования Vertex Buffer Objects
(VBO:s
) (например, Vertex Array
, но в памяти графического процессора вашего устройства).Это имеет огромное значение, поскольку ЦПУ не нужно копировать данные из ЦП в GPU на каждой итерации.
Если 2D, вы все равно можете использовать VBO:s
, но если на устройстве, которое поддерживается, draw_texture
рекомендуется.
Однако возможны следующие варианты:
Vertex Arrays
(самый медленный). Vertex Buffer Objects
(самый быстрый в 3D, медленнее, чем draw_texture
в2D). draw_texture
расширение (самое быстрое в 2D, но не рендерит 3D).
Вы можете поддерживать все эти методы, чтобы охватить весь спектр устройств Android, но не забудьте проверить расширения драйверов OpenGL
устройства.Некоторые могут поддерживать все это, но могут быть устройства, которые поддерживают только Vertex Arrays
и VBO:s
(например).
Я уже ответил на связанный вопрос здесь , но простопоказать тебе;Вот отрывок из одной из лекций Криса Пруетта в Google I / O:
Как я могу сделать так, чтобы мои объекты работали с одинаковой скоростью в любое время?
Вы не можете.Android - это многопроцессорная операционная система, и вы не знаете, что происходит (может быть, обновляется другое приложение Service
?).Что вы можете сделать, так это использовать систему с дельта-временем, как я уже упоминал выше.
, что лучше всего: сделать phisyx и все штук в onDrawFrame, или: запустить Thread, чтосделал математику для меня?Что быстрее и лучше?
Рекомендуется многопоточность (два Thread
работают параллельно).Вскоре, сделайте ваши вещи для рисования внутри onDrawFrame
и обновите вещи внутри ваших собственных созданных Thread
/ Runnable
.
Рекомендуемые ресурсы: