如果您的游戏以每秒 60 帧的速度更新,并且您希望转换需要两秒钟,那么它应该需要 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)
然后,您只需要跟踪何时停止,就可以开始了。
我不知道您是否正在使用已经具备执行此功能的引擎。但就纯粹的算法而言,这似乎是要走的路。