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 ()")
当您更改已旋转元素的原点时,旋转所围绕的平面中的点会发生变化,精灵将绘制在不同的位置(在这种情况下,演员的位置不会改变)。
如果我这样做:
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 ()")
当您更改已旋转元素的原点时,旋转所围绕的平面中的点会发生变化,精灵将绘制在不同的位置(在这种情况下,演员的位置不会改变)。