我正在寫一個小遊戲作爲編程任務的一部分。我有我的精靈/圖像移動我想要的方式,除非他們非常生澀。下面是我如何加載了圖片:我該如何讓我的動畫變得不那麼生澀?
//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
,但我無法弄清楚如何使用它。
這是我第一次寫遊戲和做圖形/動畫,所以我不太瞭解最佳實踐甚至工具。我通過查找大量教程獲得了這一點。
您的視圖是從視圖還是SurfaceView派生的? – Goz
它來自'SurfaceView'。 –
然後,我猜你只是試圖做太多每幀...可能值得提高後臺線程的優先級... – Goz