Написание OpenGL-ES в реальном времени для Android - некоторые вопросы (оптимизация) - PullRequest
3 голосов
/ 12 марта 2011

1.

ВРЕМЯ в игре: Есть ли способ использовать другие, чем System.Currentmillis()-starttime>XX, чтобы обновить что-либо в игре? Это безопасно или процессор дорого?

2

В моей игре у меня есть 20 предметов (движущиеся квадратные вершины), когда доходит до 60-70 вершин, FPS падает до 30-40 FPS, с 60 FPS. (тестирование на телефоне galaxy S i9000). Есть ли способ, чтобы моя игра FPS была 30FPS? Это хорошо для обновления моей игры до 30 FPS, или мне не нужно справляться с этим? (потому что на более низком FPS будет отставание - оно будет медленным)

Как я могу сделать так, чтобы мои объекты работали с одинаковой скоростью в любое время?

3

Каков наилучший способ: сделать phyyx и все вещи в onDrawFrame, или: запустить Thread, что для меня стало математикой? Что быстрее и лучше?

1 Ответ

11 голосов
/ 12 марта 2011

ВРЕМЯ В игре: Есть ли способ использовать другое, чем 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: drawing stuff

Как я могу сделать так, чтобы мои объекты работали с одинаковой скоростью в любое время?

Вы не можете.Android - это многопроцессорная операционная система, и вы не знаете, что происходит (может быть, обновляется другое приложение Service?).Что вы можете сделать, так это использовать систему с дельта-временем, как я уже упоминал выше.

, что лучше всего: сделать phisyx и все штук в onDrawFrame, или: запустить Thread, чтосделал математику для меня?Что быстрее и лучше?

Рекомендуется многопоточность (два Thread работают параллельно).Вскоре, сделайте ваши вещи для рисования внутри onDrawFrame и обновите вещи внутри ваших собственных созданных Thread / Runnable.

Рекомендуемые ресурсы:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...