旋转后,精灵和矩形位置在Libgdx中未对齐

时间:2017-10-06 08:25:55

标签: android opengl-es libgdx rotation

我有以下代码,其中紧密映射的精灵,矩形和多边形在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());
}

enter image description here

1 个答案:

答案 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永远不会改变,而是在渲染之前使用矩阵变换图像,并在整个生命周期内使用原始值留下精灵。