Libgdx相当于java GeneralPath

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

由于Android中不允许使用awt类,所以在我的程序中,我从数据文件中绘制一个形状,并将这些数据作为MoveTo和LineTo添加到GeneralPath,然后使用java.awt.Graphics2D fill(shape)进行绘制。

其中一个选项是及其polygon函数。您所要做的就是以一种格式向其中传递一个浮点数组

[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????