libGDX从图像中剪切出区域(自定义,而不是矩形)

时间:2015-06-05 19:17:14

标签: image libgdx scene2d

我知道如何从图像中剪切出矩形。但我想剪出一个圆圈或一个自定义的面具。

在Google Play的某些游戏(Darkness Reborn)中有此徽标。 这是怎么做到的?

    class MyActor extends Actor {
        Rectangle scissors = new Rectangle();
        Rectangle clipBounds = new Rectangle(0,0,100,100);
        Sprite sprite = new Sprite(new Texture(Gdx.files.internal("images/test2.png")));

        public MyActor() {

            sprite.getTexture().setFilter(Texture.TextureFilter.Linear, Texture.TextureFilter.Linear);
            sprite.setScale(2f);
            setBounds(sprite.getX(), sprite.getY(), sprite.getWidth(), sprite.getHeight());
            setTouchable(Touchable.enabled);
        }

        @Override
        public void draw(Batch batch, float parentAlpha) {
            ScissorStack.calculateScissors(camera, batch.getTransformMatrix(), clipBounds, scissors);
            ScissorStack.pushScissors(scissors);
            sprite.draw(batch, parentAlpha);
        }
    }

1 个答案:

答案 0 :(得分:0)

在Libgdx(或OpenGL)中没有直接的非矩形掩码方法。但是,有很多替代技术。

根据您的要求,只需在软件中进行屏蔽(使用适当的像素集生成新的Pixmap)就足够了。

另一种方法是使用Depth Buffer来屏蔽纹理元素。将深度缓冲区清除为1.0,使用0.0在缓冲区中绘制形状,然后使用深度测试渲染纹理,这样只渲染与0.0的深度缓冲元素对应的像素。

有关更多详细信息,其他选项和示例,请参阅mattdesl的LibGDX Masking wiki:https://github.com/mattdesl/lwjgl-basics/wiki/LibGDX-Masking#complex-masks