Представленный ниже игровой цикл находится в классе расширяющем Thread и хоть я добавляю отрисовку хоть убираю, fps практически не изменятся. Это говорит о том, что отрисовка много сил у процессора не отнимает. Проблемный кусок в этом цикле вот:
canvas = this.surfaceHolder.lockCanvas(null);
if (canvas == null) continue;
Если убрать этот кусок кода, всё выполняется настолько быстро , что в операции деления для Fps в знаменателе появляется ноль. Т.е. цикл начинает выполняться очень быстро и значит этот указанный выше мною кусок кода проблемный. На эмуляторе я получаю 27 fps при условии, что я вообще ничего не рисую и не считаю. Всё время уходит на блокировку канвы. Почему так много времени, что с этим можно сделать?
while (running) {
beginTime = System.currentTimeMillis();
tickCount++;
canvas = null;
// пытаемся заблокировать canvas
// для изменения картинки на поверхности
try {
canvas = this.surfaceHolder.lockCanvas(null);
if (canvas == null)
continue;
synchronized (surfaceHolder) {
//Тут обновляю координаты и рисую
}
} finally {
// в случае ошибки, плоскость не перешла в
//требуемое состояние
if (canvas != null) {
surfaceHolder.unlockCanvasAndPost(canvas);
}
}
long x = System.currentTimeMillis() - beginTime;
long x1 = 1000 / x;
System.out.println("FPS= " + x1);
}
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
При запуске программы, реализующей анализ даты и времени, с использованием класса LocaleDateTime:
При запуске клиент-серверного приложения, использующего механизм RMI, вылетает исключение javarmi
Например есть текст: "<![CDATA[Трали <c>вали</c>]]>"и вывожу я его так:
Видел подобные вопросы, не нашёл ответа на свойЛибо смотрю не туда