如何在 ShapeRenderer 中显示旋转的多边形 LibGDX/Java

How to display a rotated polygon in ShapeRenderer LibGDX/Java

我正在制作一个简单的游戏,但我似乎无法旋转一个简单的多边形。我在下面做了一个测试。

我已经在上面初始化了 (ShapeRenderer shape) 和 (shape = new ShapeRenderer())。

下面是我的代码。

    float x1 = 200;
    float y1 = 200;
    float x2 = 250;
    float y2 = 200;
    float x3 = 250;
    float y3 = 250;
    float x4 = 200;
    float y4 = 250;

    float[] f = {x1,y1,x2,y2,x3,y3,x4,y4};

    Polygon polygonTest = new Polygon();
    polygonTest.setVertices(f);
    polygonTest.setOrigin(x1+25,y1+25);
    polygonTest.rotate(-45f);

    shape.begin(ShapeRenderer.ShapeType.Line);
    shape.polygon(polygonTest.getVertices());
    shape.end();

This is the output

旋转后,我使用 polygonTest.getRotation() 仔细检查了它的旋转值,它 returns 是正确的值。我也尝试过参数中没有 "f"(浮动)指示符的正值,但没有成功。

我读到的关于这个特定问题的所有线程都提到了 setOrigin 然后轮换,但它对我不起作用。

感谢任何帮助!

getVertices() Polygon 的方法 returns 多边形的局部顶点没有缩放或旋转。

使用getTransformedVertices()即returns多边形顶点缩放、旋转后

这是测试代码:

public class GdxTest extends ApplicationAdapter {

    ShapeRenderer shapeRenderer;
    Polygon polygonTest;

    @Override
    public void create() {

        shapeRenderer= new ShapeRenderer();

        float x1 = 200;
        float y1 = 200;
        float x2 = 250;
        float y2 = 200;
        float x3 = 250;
        float y3 = 250;
        float x4 = 200;
        float y4 = 250;

        float[] f = {x1,y1,x2,y2,x3,y3,x4,y4};

        polygonTest = new Polygon();
        polygonTest.setVertices(f);
        polygonTest.setOrigin(x1+25,y1+25);
        polygonTest.rotate(-45f);
    }

    @Override
    public void render() {

        Gdx.gl.glClearColor(0,0,0,1);
        Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);

        if (polygonTest.getRotation()<360){
            polygonTest.setRotation(polygonTest.getRotation()+1);
        }else
            polygonTest.setRotation(0);

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

    @Override
    public void dispose() {
        shapeRenderer.dispose();
    }
}