如何在libgdx中绘制部分图像

时间:2015-09-16 10:35:40

标签: android libgdx

我有这个

enter image description here

我需要只绘制这部分

enter image description here

我在SpriteBatch中找不到drawArc,如何在libgdx中完成?

更新

我已经有一些SpriteBatch绘制的纹理。

阅读this使用SpriteBatch和ShapeRenderer不是一个好主意。

1 个答案:

答案 0 :(得分:1)

绘制弧线,您可以使用ShapeRenderer代替批处理及其功能

    arc(float x, float y, float radius, float start, float degrees)

如何使用它的简单示例(在渲染方法中):

    shapeRenderer.setProjectionMatrix(camera.combined);
    shapeRenderer.begin(ShapeType.Line);
    shapeRenderer.setColor(0, 0, 0, 1);

    shapeRenderer.arc(yourX, yourY, yourRadius, yourStart, yourDegrees);

    shapeRenderer.end();

如果你想在没有" arm"你可以看看这里:libgdx drawing arc curve

如果你想渲染Texture的片段,我想到了两个解决方案:

  • 使用shapeRenderer在图像上渲染带有背景颜色的填充弧并覆盖它,从而产生局部圆弧渲染的错觉。请记住,Shaperenderer调用将刷新()您的批次,但如果您不会过量,它不应该影响性能
  • 清除您要渲染的arcus形状中未包含的 Pixmap 像素。您可以使用

    获取Pixmap
    Pixmap pixmap = texture.getTextureData().consumePixmap();
    

    然后你只需迭代它并只对这些新的像素图进行处理,只有这些像素位于你的弧形内部并根据新的Pixmap创建新的纹理然后呈现新的纹理

    Pixmap newPixmap = new Pixmap(pixmap.getWidth(), pixmap.getHeight(), pixmap.getFormat());
    
    for(int i = 0 ; i < pixmap.getWidth(); i++)
        for(int j = 0 ; j < pixmap.getWidth(); j++)
            if( isInArc(i, j) ) newPixmap.draw(i, j, pixmap.getPixel(i, j) );
    
    Texture newTexture = new Texture(newPixmap);
    

    当然 isInArc()功能你需要自己编写,因为你将如何定义弧等等 - 你可以查看Intersector以使其更容易