Libgdx相当于java GeneralPath

时间:2015-09-18 11:41:15

标签: libgdx

有没有相当于java的GeneralPath,因为Android中不允许使用awt类,在我的程序中我从数据文件中绘制一个形状并将这些数据作为MoveTo和LineTo添加到GeneralPath然后使用java.awt.Graphics2D填充绘制(形状)。

1 个答案:

答案 0 :(得分:2)

其中一个选项是ShapeRenderer及其多边形功能。您所要做的就是以格式

传递一个float数组
[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();
    }

和rezult:

enter image description here

另一种允许您绘制填充形状的解决方案是使用 PolygonSpriteBatch 并为其生成PolygonRegion。以下代码基于this question Mikael Mayer's comment,它将绘制一个拾取 - 此次填充的

    @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();
    }

结果是:

enter image description here

现在在这里:

    PolygonRegion polyReg = new PolygonRegion(new TextureRegion( new Texture(pix) ), ...

我们必须传递给方法:

  • 纹理 - 我们使用从生成的Pixmap
  • 创建的纹理
  • 顶点 - 只是 float数组与ShapeRenderer案例相同
  • 三角形 - 实际上是新的

我们需要定义应该绘制的三角形 - 应用程序不知道这一点。所以我们传递带有顶点数字的短数组 - 一个三角形的下三个 - 以逆时针方向

看看这个:

enter image description here

拥有这个顶点我们必须"填充"带三角形的拾音器。如何解释下面的图片:

enter image description here

在代码中将图像与短数组进行比较,您应该了解它是如何工作的。