基于触摸点计算旋转时出现小偏差

4
我需要让一个精灵面向光标或触摸点。 触摸点的向量计算如下:
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);
}

问题在于某些旋转存在小偏移,例如(红点表示触摸位置,箭头是需要旋转的精灵),在第一张图片中大致在应该在的位置,但在其他图片中则偏离太远,可能会导致此错误的原因是什么?
如您所见,在前两张图片中,X轴的微小变化会使准确度急剧下降。
更多示例:

哦,还有,我的原始想法是:确保您在箭头的某个地方有精灵集的起点,而不是像左上角那样。这很可能是您的问题 :) - Christopher Wirt
@ChristopherWirt 尝试使用 sprite.setOriginCenter();,但结果相同。我认为libgdx默认将原点设置为中心。 - user36976
但是精灵中心是否实际上沿着箭头轴线?这会让它看起来偏离了。 - Christopher Wirt
@Springrbua,就像我之前所说的,已经尝试过这样做了。 - user36976
@Nick 我知道,我只是写下来因为你说你认为libgdx默认将“origin”设置为中心。只是想让你知道,默认应该是左下角。 - Robert P
显示剩余4条评论
1个回答

3

无论原点在哪里,该位置都位于左下角,因为原点是相对于位置而言的。因此,您计算的角度是基于精灵的左下角而不是中心。如果您想相对于精灵中心测量角度,则需要通过原点对位置进行偏移。

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

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


太明显了 :P 很好你注意到了!+1 - Robert P

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接