Застрял с прокруткой представления, чтобы следовать за спрайтом - PullRequest
2 голосов
/ 07 декабря 2011

Я очень новичок в программировании и сейчас пытаюсь сделать простую игру для Android. Проблема в том, как прокручивается вид. По моей логике я считаю, что спрайт должен оставаться в центре экрана, но это не так. Представление следует за спрайтом, но не с той же скоростью, если это имеет смысл. По виду вид отстает. Это не нервный, поэтому я знаю, что он не работает медленно. Что меня удивляет, так это то, что я устанавливаю прямоугольник прокрутки равным местоположению игрока x - ширине экрана, а затем то же самое для оси y. Так что я надеюсь, что вы, ребята, сможете мне помочь, это выяснить, почему спрайт не остается в центре представления. Любая помощь будет оценена.

Спасибо.

private static Rect displayRect = null; //rect we display to
private Rect scrollRect = null; //rect we scroll over our bitmap with

Display display = getWindowManager().getDefaultDisplay();
displayWidth = display.getWidth();             
displayHeight = display.getHeight();   

displayRect = new Rect(0, 0, displayWidth, displayHeight);
scrollRect = new Rect(0, 0, displayWidth, displayHeight);

// Установка нового верхнего левого угла прямоугольника прокрутки

    newScrollRectX = ((int)player.getXLocation() - (displayWidth/2));
    newScrollRectY = ((int)player.getYLocation() - (displayHeight/2));

// Это мой метод onDraw, поэтому он обновляется прямо перед тем, как игрок получает

    scrollRect.set(newScrollRectX, newScrollRectY,
    newScrollRectX + displayWidth, newScrollRectY + displayHeight);

// bmLargeImage - это фон 1440X1440

    canvas.drawBitmap(bmLargeImage, scrollRect, displayRect, paint);

canvas.drawBitmap(player.getBitmap(),(float)player.getX(player.getSpeedX()),     (float)player.getY(player.getSpeedY()), null);

1 Ответ

0 голосов
/ 07 декабря 2011

Моим первым предположением будет то, что вы используете целочисленные вычисления и вместо этого должны использовать вычисления с плавающей запятой.

int test = 10 / 3; // == 3
float test2 = 10 / 3.0; // == 3.33333...

Это объясняет «прыжки».Я не уверен, все ли телефоны Android имеют FPU .Возможно, вам придется использовать вычисления с фиксированной точкой , чтобы гарантировать надлежащую производительность.

...