Почему игровой цикл моего SurfaceView не может запустить приличный FPS? - PullRequest
3 голосов
/ 06 августа 2011

Я собрал простой игровой цикл, в основном с использованием техник, которые кажутся очень полезными, особенно в книге Killer Game Programming in Java и в этом уроке, который я только что нашел: Здесь Простой, синхронизированный игровой цикл с задним буфером.

Проблема в том, что он не будет перерисовывать экран при хорошем FPS. Лучшее, что я могу получить от своего Motorola Xoom - 15FPS, нацелившись на 24.

Если я наполовину уменьшу размер заднего буфера, скорость значительно возрастает, поэтому я предполагаю, что проблема может быть связана с использованием экрана в Xoom (размер моего SurfaceView составляет 1280x727) ... пока другие игры отлично работают при том же размере.

У меня нет других устройств для тестирования, поэтому я немного застрял в том, что делать в данный момент.

Что я делаю неправильно / отсутствует / не знаю?

Ответы [ 2 ]

10 голосов
/ 13 августа 2011

Может быть, что форматы пикселей вашего растрового изображения и поверхности различаются, вызывая преобразование всякий раз, когда вы рисуете растровое изображение?Это, безусловно, вызовет накладные расходы.Попробуйте поэкспериментировать с SurfaceHolder.setFormat () , чтобы увидеть, поможет ли это.

Поскольку в вашем растровом изображении используется Bitmap.Config.ARGB_8888, вы можете попытаться установить формат держателя поверхности на PixelFormat.RGBA_8888.Или, если можете, попробуйте использовать Bitmap.Config.RGB_565 и PixelFormat.RGB_565.

0 голосов
/ 06 августа 2011

Вам понадобится код, но я подозреваю, что вы не используете какие-либо темы? Если вы не используете потоки, то ваша программа будет работать нестабильно и сбои довольно часто из-за того, что все ваши процессы находятся в одном потоке

Короче говоря, убедитесь, что вы создали новый поток, я использую OpenGL, который в любом случае требует потока, так что это может быть вашим лучшим маршрутом для спуска

...