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

拍拍

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

在此处输入图片说明

dfour

如果查看矩形的值,则宽度约为370,高度约为345。该宽度大于高度。因此,当您旋转此对象时,您会期望它会高一些,而不会宽一些。我们将进行一些快速匹配,看看我们得到的是正确的:

我们将从高度上移除宽度,以获取两侧的额外空间

370-346 = 24

现在我们将其除以2,因为它平均分布在矩形的每一侧

24/2 = 12

现在,我们采用原始的x位置-额外值的1/2

268-12 = 256

而且对于y位置

739 + 12 = 751

这些与您为矩形的x和y位置获取的值匹配,因此我们知道这是正确的。

现在,如果我们对Sprite执行此操作,您将看到所获得的值不适用于旋转的Sprite。值前后的子画面相同。

造成这种情况的原因很可能是精灵的x,y,w和h永不改变,而是在渲染之前使用矩阵对图像进行了变换,从而使精灵在其整个生命周期中都具有原始值。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章