如何在 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();
}
}
我正在制作一个简单的游戏,但我似乎无法旋转一个简单的多边形。我在下面做了一个测试。
我已经在上面初始化了 (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();
}
}