繁体   English   中英

如何在Libgdx中旋转矩形?

[英]How can I rotate Rectangles in Libgdx?

我将我的精灵旋转90度,我想对我的矩形做同样的事情,以便能够将它们用于碰撞,但是rotate()方法在矩形上不可用。

这就是我做的:

treeSpr=new Sprite(new Texture(Gdx.files.internal("tree.png")));
        treeSpr.setPosition(250,700);
        treeSpr.rotate(90f); 

//Rectangle
 treeRect=new Rectangle(treeSpr.getX(),treeSpr.getHeight(),
                treeSpr.getWidth(),treeSpr.getHeight());

另一个答案基本上是正确的; 但是,我在使用该方法定位多边形时遇到了一些问题。 只是澄清一下:

使用Intersector进行碰撞检测时,LibGDX不支持旋转的矩形。 如果需要旋转矩形,则应使用“ 多边形”进行碰撞检测。

构建矩形多边形:

polygon = new Polygon(new float[]{0,0,bounds.width,0,bounds.width,bounds.height,0,bounds.height});

如果要旋转多边形,请不要忘记设置它的原点:

polygon.setOrigin(bounds.width/2, bounds.height/2);

现在您可以旋转碰撞多边形:

polygon.setRotation(degrees);

此外,在代码中的某处,您可能希望更新碰撞多边形的位置以匹配您的精灵:

polygon.setPosition(x, y);

我们甚至可以在屏幕上绘制多边形(用于调试目的):

drawDebug(ShapeRenderer shapeRenderer) {
    shapeRenderer.begin(ShapeRenderer.ShapeType.Line);
    shapeRenderer.polygon(polygon.getTransformedVertices());
    shapeRenderer.end();
}

碰撞检测:

Intersector的overlapConvexPolygons():

boolean collision = Intersector.overlapConvexPolygons(polygon1, polygon2)

如其他答案中所述,此方法仅在以下情况下有效:

  • 使用凸多边形,矩形是
  • 执行多边形到多边形检查,例如:您不能混合矩形和多边形

回转

您可以从矩形或精灵创建一个多边形 (为多边形构造函数提供顶点)并使用它的rotate(float degrees)方法:

treePoly = new Polygon(new float[] {
               treeRect.x, treeRect.y,
               treeRect.x, treeRect.y + treeRect.height,
               treeRect.x + treeRect.width, treeRect.y + treeRect.height,
               treeRect.x + treeRect.width, treeRect.y
           });

treePoly.rotate(45f);

碰撞检测

然后可以通过Intersector类完成碰撞检查:

Intersector.overlapConvexPolygons(polygon1, polygon2)

请记住,此方法仅适用于:

  • 你使用矩形的凸多边形
  • 你做多边形到多边形检查,例如:你不能混合矩形和多边形

我认为类似的东西可以帮助,我现在无法测试,

//Rectangle
 treeRect=new Rectangle(treeSpr.getX(),
                        treeSpr.getY(),
                        treeSpr.getHeight(), //now is change width by height
                        treeSpr.getWidth());  //now is change height by width

注意:您可能需要调整两者的旋转原点

您可以使用渲染ShapeRenderer来查看结果是否符合预期:

在变量类中 添加 测试

private ShapeRenderer sRDebugRectangel = new ShapeRenderer();

在更新或绘图中 添加 测试

sRDebugRectangel.begin(ShapeType.Filled);
sRDebugRectangel.identity();

sRDebugRectangel.rect(yourRectangle.getX(), 
                      yourRectangle.getY(),
                      yourRectangle.getWidth(),
                      yourRectangle.getHeight());

sRDebugRectangel.end();

我可以看一下这个问题的答案,使用一个shaperrender,也就是说:

Libgdx,如何从坐标创建一个矩形?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM