Низкая производительность на планшете Android с SurfaceView - PullRequest
1 голос
/ 06 февраля 2012

Я разрабатываю карточную игру для Android, используя SurfaceView и canvas для создания пользовательского интерфейса.

Я пытался максимально оптимизировать все, но у меня осталось два вопроса:

  • Во время игры мне нужно нарисовать 40 битовых карт (40карт в итальянской колоде), лучше ли создавать все растровые изображения в методе onCreate моего настраиваемого SurfaceView (сохранять их в массиве) или создавать их по мере необходимости (каждый раз, когда пользователь получает новую карту, например)?

  • Я могу получить более 90 кадров в секунду на старом Samsung I5500 (528 МГц, с экраном QVGA), 60 кадров в секунду на Optimus Life (экран 800 МГц и HVGA) и 60fps с Nexus One / Motorola Razr (1 ГГц и двухъядерный 1 ГГц с экранами WVGA и qHD), но когда я запускаю игру на планшете Android (двухъядерный Motorola Xoom 1 ГГц и 1 ГБ оперативной памяти), я получаю только 30/40fps ... как это возможно, что процессор 528 МГц с 256 МБ ОЗУ может обрабатывать более 90 кадров в секунду, а двухъядерный процессор не может обрабатывать 60 кадров в секунду?Я не вижу каких-либо вызовов GC во время выполнения ....

РЕДАКТИРОВАТЬ: Просто чтобы уточнить, я пробовал и ARGB_888 и RGB_565 без каких-либо изменений в производительности ...

Есть предложения?Спасибо

Ответы [ 2 ]

0 голосов
/ 07 февраля 2012
  1. Хорошо, так что лучше создать растровое изображение в методе onCreate, вот что я сейчас делаю ...

  2. Они в порядке,Я считаю, что 60 к / с на некоторых устройствах - это лишь некоторые ограничения, установленные производителями, поскольку вы не найдете никаких преимуществ в получении более 60 к / с (я делаю это предположение, поскольку оно не меняет рендеринг 1 карты, 10 карт илинет карты ... метод OnDraw вызывается 60 раз в секунду, но если я добавляю, например, карты 50/100, он соответственно падаеткаждое устройство, и я получаю точный размер изображения, не меняя его размера ...

  3. Я пытался посмотреть на него, но из того, что я понимаю, все время приложенияВыполнение используется для рисования растрового изображения, а не для изменения размера или обновления его позиции здесь:

enter image description here

Я знаю, но это усложнит разработку, и я считаю, что использовать холст для 7 карт на экране должно быть просто замечательно….

Я не вытягиваю каждую карту из колоды ... Я просто заменяю растровое изображение по мере необходимости:)

ОБНОВЛЕНИЕ: Я пыталсячтобы запустить игру на Xoom 2, Galaxy Tab 7 plus и Asus Transformer Prime, и она прекрасно работает с 60 кадрами в секунду….может ли это быть проблемой устройств Tegra 2?

0 голосов
/ 06 февраля 2012

Некоторые моменты для вас, чтобы рассмотреть:

  1. Рекомендуется не создавать новые объекты во время игры, в противном случае вы можете получить неожиданные сборки мусора.

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

  3. Вы можете использовать инструменты профилирования для подтверждения: TraceView

  4. OpenGL будет намного быстрее

  5. последний совет: не тяните перекрывающиеся карты, если можете, рисуйте только видимые.

Удачи

...