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