通常您希望将时间带入方程,以便您可以平滑地更改time 上的角度。大多数设置都有一种方法来获取渲染前一帧所需的时间,典型的方法是说......
int touchAngle;
float angle;
float deltaTime; //Time it took to render last frame, typically in miliseconds
float amountToTurnPerSecond;
public void update()
{
if((int)angle != touchAngle) angle += (deltaTime * amountToTurnPerSecond);
}
这将使您的角度每秒改变amountToTurnPerSecond,但在每一帧上缓慢改变正确的变化量,使其平滑。需要注意的是,大多数时候你不会均匀地以touchAngle 结束,所以检查你是否过去并改为设置为touchAngle 是个好主意。
编辑以跟进评论:
我认为获得正确转弯方向的最简单方法实际上是根本不使用角度。您需要在 2d 空间中获取从触摸到角色的相对方向。通常,您将触摸从屏幕空间带到世界空间,然后在那里进行计算(至少这是我过去所做的)。从接触世界空间开始,然后使用矢量叉积来确定方向。这看起来有点像以下......
character position = cx, cy
target position = tx, ty
current facing direction of character = rx, ry
首先我们取角色到目标位置的距离:
dx = tx - cx
dy = ty - cy
这不仅告诉我们它离我们有多远,而且本质上告诉我们,如果我们在 0、0 处,目标会在 2d 空间中的哪个象限?
接下来我们做一个叉积:
cross_product = dx * ry - dy * rx
如果这是积极的,你就走一条路,如果是消极的,你就走另一条路。之所以这样,是因为如果距离例如(-5, 2),那么我们就知道,如果我们正对着北方,那么这个点就在我们的左边 5 和前面 2。所以我们向左转。