Я пишу небольшую игру как часть задания по программированию. Мои спрайты / изображения перемещаются так, как я хочу, за исключением того, что они очень резкие. Вот как я загружаю изображение:
//missile and paint are private members of the animation thread
missile = Bitmap.createBitmap(BitmapFactory.decodeResource(getResources(), R.drawable.missile));
paint = new Paint();
paint.setAntiAlias(true);
startTime = new Date().getTime();
Метод run
моей темы выглядит так:
@Override
public void run() {
while(running) {
Canvas canvas = null;
try {
canvas = surfaceHolder.lockCanvas(null);
synchronized (surfaceHolder) {
updatePhysics();
doDraw(canvas);
}
} finally {
if(canvas != null) {
surfaceHolder.unlockCanvasAndPost(canvas);
}
}
}
}
updatePhysics
просто выполняет вычисления и сохраняет значение в закрытом элементе потока с именем projectilePosition
:
function updatePhysics() {
projectilePosition = interceptionCalculationService.positionAtTime((startTime - new Date().getTime()) / 1000);
}
Затем, по моему doDraw
методу, я делаю:
private void doDraw(Canvas canvas) {
canvas.drawColor(Color.BLACK);
...
//I update the position of the missile
canvas.drawBitmap(missile, (int) projectilePosition.getDistance() * 2, (int) (getHeight() - (95 + projectilePosition.getHeight())), paint);
canvas.restore();
}
Проблема в том, что анимация очень резкая. Ракета идет по правильному пути, но она совсем не гладкая. Я предполагаю, что это потому, что я на самом деле не контролирую интервал, когда вызывается метод run
потока. Как я могу сделать свою анимацию более плавной? Я смотрел на TranslateAnimation
, но не могу понять, как его использовать.
Я впервые пишу игру и делаю графику / анимацию, поэтому я не очень хорошо знаю лучшие практики или даже инструменты. Я получил это далеко, просмотрев многочисленные учебники.