Я разрабатываю базовую карточную игру для 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 кадра в секунду, отрисовывая только фон.
У кого-нибудь есть идеи о том, что я могу сделать, чтобы улучшить частоту кадров? Я предполагаю, что моя проблема должна быть связана с рисованием растрового изображения, поскольку я устранил в основном все остальное.