Android - плавная холостая поступательная прокрутка, основанная на движении асинхронного объекта - PullRequest
0 голосов
/ 28 апреля 2011

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

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

<code>
// 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 &gt RightPerimeter * 0.8 && rightPerimeter &lt levelWidth) {
  translateX -= shiftFactor;
  viewPortLeft += shiftFactor;
  viewPortRight += shiftFactor;
}

При более низких значениях shiftFactor он плавно прокручивается, но шарик может легко «обогнать» прокрутку. Для более крупных shiftFactors прокрутка становится все более плавной.

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

1 Ответ

2 голосов
/ 28 апреля 2011

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

...