ゲームが毎秒60フレームで更新され、トランジションに2秒かかる場合は、そこに到達するまでに120フレームかかるはずです。
したがって、特定の更新で移動する必要がある量はですtotal/120
。
これを抽象化して、移動をキューに入れ、FPSと各更新を移動する量を計算し.setCenter
、現在の位置と更新量を呼び出すメソッドに組み込むことができます。これは通常、補間と呼ばれます。移動する必要がある距離を決定するために、その絶対値を超えないようにしますcurrent - destination
(どちらが他の前にあるかは問題ではないため、絶対値を使用して符号を無視します。技術的には、距離はスカラーであるのに対し、位置はベクトルです)。
したがって、セミコードで要約すると(これらの関数の実際のコントラクトはわかりません):
//given these variables already have value
double fps, currentX, destinationX, currentY, destinationY, animationLength; //animation length in seconds
...
double xValue = Math.abs(currentX - destinationX);
double yValue = Math.abs(currentY - destinationY);
...
//on each update:
double amountToMoveX = xValue / (animationLength * fps);
double amountToMoveY = yValue / (animationLength * fps);
camera.setCenter(camera.getX() + amountToMoveX, camera.getY() + amountToMoveY)
次に、いつ停止するかを追跡する必要があります。そうすれば、うまくいくはずです。
すでにこれを行う手段を備えたエンジンを使用しているかどうかはわかりません。しかし、純粋なアルゴリズムの観点からは、これが進むべき道のようです。