Android - плавная трансляционная прокрутка холста на основе движения асинхронного объекта

StackOverflow https://stackoverflow.com/questions/5810992

Вопрос

У меня есть игра в Android, в которой мяч движется на основе акселерометра. Мяч движется с переменной скоростью. В игре есть уровни, намного больше, чем экран смартфона, и поэтому я перевожу холст, когда мяч приближается к краю экрана, чтобы соответствовать большим уровням. Прокрутка работает, проблема плавно прокручивается на основе мяча.

Вот попытка, которая меняется на основе изменения позиции мяча между обновлениями:


// RIGHT SHIFT
shiftFactor = Math.abs(xCoor - prevXCoor);
if (ball.x + translateX &gt rightX * 0.8
 && rightX &lt levelWidth + padding) {
    translateX -= shiftFactor;
    leftX += shiftFactor;
    rightX += shiftFactor;
} 
Это выглядит нервным.

Вот попытка, которая меняется на основе какой -то постоянной.


int shiftFactor=2;

//SHIFT SCREEN RIGHT
if (ball.x + translateX > RightPerimeter * 0.8 && rightPerimeter < levelWidth) {
  translateX -= shiftFactor;
  viewPortLeft += shiftFactor;
  viewPortRight += shiftFactor;
}

Для более низких значений Shiftfactor, он плавно прокручивает, но мяч может легко «опередить» прокрутку. Для более крупных Shiftfactors прокрутка становится постепенно Choppier.

Какие-либо предложения? Спасибо.

Это было полезно?

Решение

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top