Проблемы с частотой кадров растрового изображения Android

Я разрабатываю базовую карточную игру для Android. На данный момент я ориентируюсь на Android 3.0 и тестирую планшет Asus Transformer. Я использую объект SurfaceView с простыми операциями с холстом, похожими на пример Lunar Lander в SDK. У меня включено аппаратное ускорение в AndroidManifest.xml.

Я практически закончил программировать игру. Тем не менее, у меня есть некоторые проблемы с частотой кадров. Я получаю частоту кадров 21-22 кадра в секунду во время основного игрового процесса. Тем не менее, я предвидел добавление некоторых эффектов частиц для простой глазной конфеты, что, безусловно, даст мне неприемлемую частоту кадров. Чтобы помочь изолировать проблему, я закомментировал рисунок для всего текста и карточек, а также для всей анимации. Это увеличило мою частоту кадров до 31 кадра в секунду. Это оставляет меня с простым игровым циклом, который блокирует холст, заполняет его черным цветом, рисует растровое изображение фона 1280x800, а также разблокирует и публикует холст. Удаление фоновой прорисовки увеличивает частоту кадров примерно до 62 кадров в секунду, что должно быть около максимума устройства из-за дросселирования lockCanvas. Должно ли рисование простого растрового изображения быть такой дорогостоящей операцией? Я знаю, что это большая текстура, но я видел много игр, в которых успешно используются большие фоновые текстуры с небольшим эффектом. Могу ли я добиться приличной частоты кадров без OpenGL? Я просмотрел журнал и подтвердил, что это не проблема GC.

Единственное, что я пробовал до сих пор, это убедиться, что растровое изображение не масштабируется активно. Я изменил свой фон png на 1280x696, который является точным размером, скорректированным для панели действий и основной нижней панели в виде сот. Я поместил измененное в папку drawable-nodpi, поэтому я считаю, что мое изображение не должно масштабироваться. Однако на частоту кадров это никак не повлияло; частота кадров падает до 31 кадра в секунду, отрисовывая только фон.

У кого-нибудь есть идеи о том, что я могу сделать, чтобы улучшить частоту кадров? Я предполагаю, что моя проблема должна быть связана с рисованием растрового изображения, поскольку я устранил в основном все остальное.


person BKW    schedule 03.01.2012    source источник
comment
Я провел еще немного тестов и обнаружил очень странное поведение. Я создал изображение в нескольких разных размерах. Для изображения 1200x600 я не вижу падения частоты кадров (61 кадр/с). Для изображения 1260x650 частота кадров падает до 31 кадра в секунду. Единственная измененная переменная — это размер изображения. Любые идеи?   -  person BKW    schedule 03.01.2012


Ответы (1)


У меня была аналогичная проблема, вызванная использованием RGB_565 для моего SurfaceView и ARGB_8888 для моего растрового изображения. Как только я настроил Surface View на использование того же, что и растровое изображение, я перешел с 20 кадров в секунду на 59-60 кадров в секунду. Преобразование очень медленное. Извините, что поздно, но, возможно, это поможет кому-то еще.

person Laura    schedule 26.03.2012
comment
Не могли бы вы привести пример? - person user2801184; 09.12.2016