我正在绘制一条路径并沿着它移动一个精灵。现在我希望精灵在每个航路点后始终查看行驶方向。使用此代码,我可以设置方向(非平滑)。getTargetAngle 返回新的旋转角度。
float angleDeg = getTargetAngle(sprite.getX(), sprite.getY(), targetX[pWaypointIndex + 1], targetY[pWaypointIndex + 1]);
sprite.setRotation(angleDeg);
现在我可以顺利完成,除了我在 -179° 到 179° 的转折点,它沿着长路径而不是短路径转向并进行跳跃:
sprite.unregisterEntityModifier(rotMod);
rotMod = new RotationModifier(0.5f, currentAngleDeg, angleDeg);
sprite.registerEntityModifier(rotMod);
当两个角度的绝对相加超过 180° 时,我尝试将 360° 添加/隐藏到精灵的当前角度。从 -179° 到 179° 跳跃到从 181 到 179 的跳跃,但这不起作用。
if(Math.abs((float)angleDeg) + Math.abs((float)currentAngleDeg) > 180) {
if (currentAngleDeg < 0) {
currentAngleDeg+=360.0f;
} else {
currentAngleDeg-=360.0f;
}
获取目标角度:
public float getTargetAngle(float startX, float startY, float targetX, float targetY){
float dX = targetX - startX;
float dY = targetY - startY;
float angleRad = (float) Math.atan2(dY, dX);
float angleDeg = (float) Math.toDegrees(angleRad);
return angleDeg;
}