Я только что кое-что узнал, и мне было интересно, как и почему. Я разрабатываю небольшую аркадную игру для Android. Я решил игнорировать OpenGL и использовать стандартные SurfaceView и Drawables, чтобы сделать это, так как он предположительно будет светлым (10 спрайтов или около того). У меня есть drawables, которые я загружаю, и использую метод Draw и передавая им свой холст. Это как каждый спрайт обращается к экрану. Хорошо получается, что рисунок 4-5 больших спрайтов (200X400 или около того) занимает много времени на менее чем новых моделях телефонов. Достаточно долго, чтобы моя игра была неиграбельной. Мы говорим о 50-60 миллисекундах для создания одного кадра с использованием этого метода. И я действительно ничего не делаю, кроме рисунка, и нигде я не могу сократить расходы. Поэтому я решил попробовать использовать Bitmaps. Здесь, однако, мне нужно предварительно задать размер, так как в растровом виде нет метода setBounds. Нет проблем, я изменяю их размер, чтобы соответствовать моему текущему экрану при загрузке, проблема решена.
OK. Поэтому у меня есть растровые изображения. Теперь я использую Canvas.DrawBitmap для рисования. Я скачу новый метод рисования.. и я получаю повышение эффективности 400%!. Вместо 50-60 мс весь цикл рисования теперь занимает 8-12 мс. Какого черта??? Чтобы исключить это, я тоже приурочил setBounds, он занимает < 1ms, чтобы он не виноват. Это фактический Drawable.Draw, который замедляет работу.
Для меня это отличная новость, так как я действительно не хотел изучать OpenGL, чтобы сделать игру более доступной, но я не могу перестать думать об этом - все в порядке? есть ли проблемы с моим методом? Почему он нигде не упоминается?