LibGDX 在已旋转的演员上重置原点时出现问题

Trouble with LibGDX resetting origin on an already rotated actor

如果我这样做:

actor.setOrigin(0, 0);
actor.setRotation(45);
actor.setOrigin(actor.getWidth() / 2, actor.getHeight() / 2);

似乎在最后一次 setOrigin 调用中,actor 被重新定位到如果 actor.setRotation(45) 在其最新原点设置后被调用的位置。

我该怎么做才能使 actor 的最新来源仅用于以后的 "scale" 和 "rotation" 操作?

好的,所以我查看了 libgdx 的源代码,我会告诉你简短的答案。

基本上当您设置原点或旋转时,您只需更改名为 "originx"、"originy" 和 "rotation" 的变量。因此每次调用 setOrigin 都会覆盖之前调用中设置的值。

每次绘制演员时,它都会使用当前变量重新计算边界。

为了清楚起见,setOrigin 看起来像这样:

public void setOrigin (float originX, float originY) {
    this.originX = originX;
    this.originY = originY;
}

所以前面的setOrigin就丢失了

在您的案例中,actor 本身的重新定位不会改变,但显示的精灵或纹理的位置会改变。

按以下顺序计算:

Position -> Origin -> Scale -> Rotation

See: Sprite.java (method: "getVertices ()")

当您更改已旋转元素的原点时,旋转所围绕的平面中的点会发生变化,精灵将绘制在不同的位置(在这种情况下,演员的位置不会改变)。