基于触摸点计算旋转时的小偏移

时间:2014-07-15 13:25:10

标签: java android math libgdx

我需要一个精灵面对光标/触摸点。 触摸点的矢量计算如下:

game.getCamera().unproject(
new Vector3().set(Gdx.input.getX(), Gdx.input.getY(), 0)
, 0, 0, Gdx.graphics.getWidth(), Gdx.graphics.getHeight())

然后我用以下方法计算精灵需要转动的度数:

public void rotateTo(Vector3 vector) {
    double angle = Math.atan2(vector.y - position.y, vector.x - position.x);
    rotation = (float) Math.toDegrees(angle) - 90;
    sprite.setRotation(rotation);
}

问题是在某些旋转中有一个小的偏移(例如,红点表示触摸位置,箭头是需要旋转的精灵),在第一张图片中它大致应该在哪里但是在其他人离开了,可能导致这个错误的原因是什么?:

enter image description here enter image description here

正如您在前两张图片中看到的那样,X轴的变化很小,精度会急剧下降。

更多例子:

enter image description here enter image description here

1 个答案:

答案 0 :(得分:3)

无论原点如何,位置都在左下方,因为原点与位置有关。因此,您要根据精灵的左下角而不是中心来计算角度。如果要测量相对于精灵中心的角度,则需要通过原点偏移位置。

double angle = Math.atan2(
    vector.y - position.y - spriteOrigin.y, 
    vector.x - position.x - spriteOrigin.x);

绘制精灵时请记住这一点......它的位置始终位于左下角,因此在设置其位置时请考虑到这一点。