我有以下代码,其中紧密映射的精灵,矩形和多边形在libgdx中以相同的角度旋转。旋转后矩形与精灵不对齐。尽管精灵在绘制时会旋转,但旋转后坐标和尺寸保持不变。矩形不是这种情况。请参阅下面的代码和结果图。
public void rotate(int angle){
System.out.println("Before-recta x , y " + this.rectangle.getX() + " " + this.rectangle.getY() + " " + this.rectangle.getHeight() + " " + this.rectangle.getWidth());
System.out.println("Before-sprite x , y " + sprite.getX() + " " + sprite.getY()+ " " + this.sprite.getHeight() + " " + this.sprite.getWidth());
this.sprite.rotate(angle);
this.rectangle = null;
this.polygon.rotate(angle);
this.rectangle = this.polygon.getBoundingRectangle();
System.out.println("Afer-sprite x , y " + sprite.getX() + " " + sprite.getY() + " " + this.sprite.getHeight() + " " + this.sprite.getWidth());
System.out.println("Afer-recta x , y " + this.rectangle.getX() + " " + this.rectangle.getY() + " " + this.rectangle.getHeight() + " " + this.rectangle.getWidth());
}
答案 0 :(得分:3)
如果查看矩形的值,宽度约为370,高度约为345.这比它更高更宽。因此,当你旋转它时,你会发现它比它更宽。我们会做一些快速匹配,看看我们得到的是否正确:
我们将从高处移除宽度以获得双方额外空间的数量
370 - 346 = 24
现在我们将它除以2,因为它平均分配到矩形的每一边
24/2 = 12
我们现在采用原始x位置 - 额外值的1/2
268 - 12 = 256
也是y位置
739 + 12 = 751
这些匹配您为矩形的x和y位置获得的值,因此我们知道这是正确的。
现在,如果我们为Sprite执行此操作,您将看到您获得的值不适用于旋转的精灵。值之前和之后的精灵是相同的。
这样做的原因很可能是精灵' sx,y,w和h永远不会改变,而是在渲染之前使用矩阵变换图像,并在整个生命周期内使用原始值留下精灵。