2014-04-01 2 views
1


Я только что закончил развиваю свою мини-игру на Android, и я получил несколько вопросов о Perfomance и вообще «как»:

Если у меня есть 25+ объектов на creeen (только полигон с 7-8 углами) начинает сильно задерживаться и Использование процессора очень высокое (15-20% без обнаружения столкновений, до 50% с обнаружением столкновения на Samsung Note 10.1 планшет).
Итак, у меня есть ~ 25 полигонов (астероидов), и они всегда «летают». Чтобы переместить их, я делаю таймер, вправо? На TimerTask я получил что-то вроде этогоПеремещение объектов плавно, плохо Perfomance

public void move() { 
    translate[1] += speed[1]; 
    translate[0] += speed[0]; 

    updateTranslateMatrix(); // updating translate matrix and then send it into vertex shader 
    updateAABBCoords(); // update coordinates of Axis-aligned bounding box 
    updateCoordsByTranslate(); // update coordinates of verticles (to be able to define exact collision (with bullets and starship)) 
} 

Есть ли что-то ненужное в этом методе?
Также я хочу спросить, есть ли это ОК для запуска этого таймера каждые 17 мс? Или 17 мс слишком часто? Я чувствую гладкость движения только в 17 мс, возможно, я делаю это неправильно? И один и тот же интервал таймера Я получил движение звездолетов/пуль и обнаружение столкновений.
Помогите мне, пожалуйста. Мне не хватает чего-то огромного и фундаментального, потому что 50% процессор на заметке 10.1 в этой простой игре с астероидами не является нормальным.

ответ

1

Один из ключевых вопросов, я считаю, заключается в том, что вы назначаете отдельного человека Timer для каждого объекта вместо использования игрового цикла общего назначения. Подавляющее большинство игр используют игровой цикл, который работает непрерывно и может быть разделен, как правило, на два компонента: «Обновление и рендеринг».

An article on basic game loop design for Java/Android

An answer to a relevant question on game loop design on gamedev.stackexchange.com

При использовании цикла игры вы не можете гарантировать возможность обновлять точно каждые 17ms или какой-либо другой произвольной длительности. Вместо этого методы Update и Render получают параметр DeltaTime, который является временем с момента последнего кадра.

Это используется, например, при получении новых позиций объектов путем умножения его на скорость объекта. Это позволяет обеспечить гладкую интерполяцию положения и гарантирует, что скорость процессора не будет зависеть от скорости процессора.

+0

Очень большое спасибо @ssell. Я постараюсь сделать что-то в этом направлении. – Faceles

 Смежные вопросы

  • Нет связанных вопросов^_^