我想将一组精灵,多边形和矩形一起旋转。图a)显示了2个精灵,边界多边形和矩形。该组围绕大矩形的中心旋转90度(两个矩形的联合)。
以下代码创建图b)。它不会在联合矩形的中心周围旋转精灵和多边形。
public void rotate(int rangle, float rotateX, float rotateY){
this.sprite.rotate(rangle);
this.polygon.rotate(rangle);
Polygon tempPoly = new Polygon(new float[] {
this.rectangle.x, this.rectangle.y,
this.rectangle.x, this.rectangle.y + this.rectangle.height,
this.rectangle.x + this.rectangle.width, this.rectangle.y + this.rectangle.height,
this.rectangle.x + this.rectangle.width, this.rectangle.y
});
tempPoly.setOrigin(rotateX, rotateY);
tempPoly.rotate(rangle);
this.rectangle = null;
this.rectangle = tempPoly.getBoundingRectangle();
}
以下代码创建图c)。当我尝试将精灵和多边形移动到矩形位置时,有一个未对齐。
public void rotate(int rangle, float rotateX, float rotateY){
this.sprite.rotate(rangle);
this.polygon.rotate(rangle);
Polygon tempPoly = new Polygon(new float[] {
this.rectangle.x, this.rectangle.y,
this.rectangle.x, this.rectangle.y + this.rectangle.height,
this.rectangle.x + this.rectangle.width, this.rectangle.y + this.rectangle.height,
this.rectangle.x + this.rectangle.width, this.rectangle.y
});
tempPoly.setOrigin(rotateX, rotateY);
tempPoly.rotate(rangle);
this.rectangle = null;
this.rectangle = tempPoly.getBoundingRectangle();
// This tries to move them to rectangle
this.sprite.setPosition(this.rectangle.getX(), this.rectangle.getY());
this.polygon.setPosition(this.rectangle.getX(), this.rectangle.getY());
}
问题是如何在旋转后将精灵与矩形对齐(即类似于图a,角度= 0)。 提示:问题出现是因为精灵在绘制时会旋转,因此精灵和矩形之间会出现错位。 (link)
答案 0 :(得分:0)
我必须从多边形获得旋转位置并使用矩形计算偏移量。然后将该偏移量添加到精灵和多边形。
public void rotate(int rangle, float rotateX, float rotateY){Rectangle pastRect = polygon.getBoundingRectangle();
this.sprite.rotate(rangle);
this.polygon.rotate(rangle);
Polygon tempPoly = new Polygon(new float[] {
this.rectangle.x, this.rectangle.y,
this.rectangle.x, this.rectangle.y + this.rectangle.height,
this.rectangle.x + this.rectangle.width, this.rectangle.y + this.rectangle.height,
this.rectangle.x + this.rectangle.width, this.rectangle.y
});
tempPoly.setOrigin(rotateX, rotateY);
tempPoly.rotate(rangle);
Rectangle tempRect = new Polygon(polygon.getTransformedVertices()).getBoundingRectangle();
this.rectangle = tempPoly.getBoundingRectangle();
float x = sprite.getX() + (rectangle.x - tempRect.x);
float y = sprite.getY() + (rectangle.y - tempRect.y);
this.sprite.setPosition(x,y);
this.polygon.setPosition(x,y);
}