java – 如何在Libgdx中旋转矩形?

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

这就是我做的:

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进行碰撞检测.

构建矩形多边形:

polygon = new polygon(new float[]{0,bounds.width,bounds.height,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)

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

>使用矩形所在的凸多边形>执行多边形到多边形检查,例如:你不能混合矩形和多边形

相关文章

Java中的String是不可变对象 在面向对象及函数编程语言中,不...
String, StringBuffer 和 StringBuilder 可变性 String不可变...
序列化:把对象转换为字节序列的过程称为对象的序列化. 反序...
先说结论,是对象!可以继续往下看 数组是不是对象 什么是对...
为什么浮点数 float 或 double 运算的时候会有精度丢失的风险...
面试题引入 这里引申出一个经典问题,看下面代码 Integer a ...