Libgdx相当于java GeneralPath
由于Android中不允许使用awt类,所以在我的程序中,我从数据文件中绘制一个形状,并将这些数据作为MoveTo和LineTo添加到GeneralPath,然后使用java.awt.Graphics2D fill(shape)进行绘制。其中一个选项是及其polygon函数。您所要做的就是以一种格式向其中传递一个浮点数组Libgdx相当于java GeneralPath,libgdx,Libgdx,由于Android中不允许使用awt类,所以在我的程序中,我从数据文件中绘制一个形状,并将这些数据作为MoveTo和LineTo添加到GeneralPath,然后使用java.awt.Graphics2D fill(shape)进行绘制。其中一个选项是及其polygon函数。您所要做的就是以一种格式向其中传递一个浮点数组 [x1, y1, x2, y2, x3, y3...] 唯一的问题是,无法绘制填充多边形 绘制拾取的代码示例: @Override public void s
[x1, y1, x2, y2, x3, y3...]
唯一的问题是,无法绘制填充多边形
绘制拾取的代码示例:
@Override
public void show()
{
shapeRenderer = new ShapeRenderer();
}
@Override
public void render(float delta)
{
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
shapeRenderer.begin(ShapeType.Line);
shapeRenderer.setColor(Color.WHITE);
shapeRenderer.polygon(new float[]{ 20, 20, 20, 40, 60, 40, 60, 60, 90, 60, 110, 40, 110, 20, 100, 20, 90, 10, 80, 20, 60, 20, 50, 10, 40, 20 });
shapeRenderer.end();
}
还有雷祖尔特:
另一种允许您绘制填充形状的解决方案是使用PolygonSpriteBatch并为其生成PolygonRegion。以下代码基于,它将绘制一个皮卡-此次填充的皮卡:
@Override
public void show()
{
//creating a pixmap - array of pixels
Pixmap pix = new Pixmap(1, 1, Pixmap.Format.RGBA8888);
//setting it white color and fill format
pix.setColor(Color.WHITE.toIntBits());
pix.fill();
//now we are passing vertices and triangles
PolygonRegion polyReg = new PolygonRegion(new TextureRegion( new Texture(pix) ),
new float[] //vertices
{
20, 20, 20, 40, 60, 40, 60, 60, 90, 60, 110, 40, 110, 20, 100, 20, 90, 10, 80, 20, 60, 20, 50, 10, 40, 20
}
, new short[] //triangles
{
0, 1, 2,
2, 3, 4,
4, 5, 2,
5, 6, 2,
6, 7, 2,
7, 8, 9,
9, 2, 7,
9, 10, 2,
10, 11, 12,
10, 0, 2
});
//creating a sprite based on polygonRegion above
poly = new PolygonSprite(polyReg);
polyBatch = new PolygonSpriteBatch();
}
@Override
public void render(float delta)
{
Gdx.gl.glClearColor(0, 0, 0, 1);
Gdx.gl.glClear(GL20.GL_COLOR_BUFFER_BIT);
polyBatch.begin();
poly.draw(polyBatch);
polyBatch.end();
}
结果是:
现在在这里:
PolygonRegion polyReg = new PolygonRegion(new TextureRegion( new Texture(pix) ), ...
我们必须考虑以下方法:
- 纹理-我们使用的是从生成的Pixmap创建的纹理
- 顶点-与ShaperEnder情况下相同的浮点数组
- 三角形-这实际上是一些新的东西
将图像与代码中的短数组进行比较,您应该了解它是如何工作的。Perfect非常好地解释了我有一个问题:MoveTo和LineTo等价物呢???您不需要调用任何MoveTo/LineTo-描述的方法将只渲染连接的顶点-如图中所示。ShaperEnder也有方法point()和line()来绘制这些图形。我有一个非常复杂的形状,有2441个点,它用ShaperEnder和Polygon正确绘制,但没有填充,但我需要用第二个方法PolygonRegion和PolygonSpriteBatch填充PolygonRegion以三角形为短[],问题是我有这么多的点,形状没有三角形???据我所知,这是关于实现变换alghoritm,它将为您计算三角形短数组-我从来没有这样做,所以我不能给您一个解决方案,但我发现的是:1。Libgdx,以便您可以尝试它;2.有一些alghoritms。希望它能帮助你。很奇怪,ShaperEnder中没有填充方法,尽管它有ShapeType,并且填充了Enum常量,begin方法采用ShapeType。填充为barameter????