私はプログラミング割り当ての一部として少しゲームを書いています。私はスプライト/イメージが私が望むように動いているが、非常にぎこちない。私は、画像をアップロードしていますする方法は次のとおりです。私のアニメーションを不規則にする方法を教えてください。
//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
:
doDraw
方法で次に
function updatePhysics() {
projectilePosition = interceptionCalculationService.positionAtTime((startTime - new Date().getTime())/1000);
}
、
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
を見ていましたが、私はそれをどのように使用するかを理解できません。
これは初めてゲームを書くときとグラフィックス/アニメーションを行うときのため、ベストプラクティスやツールについてもよく理解していません。私は数多くのチュートリアルを調べることで、これまでのところこれを得ました。
ViewはViewまたはSurfaceViewから派生していますか? – Goz
これは 'SurfaceView'から派生したものです。 –
それからフレームごとにあまりにも多くのことをしようとしていると思うでしょう...バックグラウンドスレッドの優先順位を上げる価値があるかもしれません... – Goz