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

问题描述 投票:1回答:1

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

我在上面初始化了(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()仔细检查其旋转值,并返回正确的值。我也尝试了正值而没有参数中的“f”(浮点)指标,但没有运气。

我刚刚提到的所有关于setOrigin的特定问题的线程然后旋转,但它对我不起作用。

任何帮助表示赞赏!

java android libgdx
1个回答
1
投票

getVertices()Polygon方法返回多边形的局部顶点而不进行缩放或旋转。

使用getTransformedVertices()在缩放,旋转后返回多边形的顶点。

这是测试代码:

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();
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.