2015-06-05 56 views
0

我知道如何将矩形切出图像。但我想剪出一个圈或一个自定义的面具。libGDX从图像中切出区域(自定义,不是矩形)

在Google Play的一些游戏(黑暗重生)中有这个标志。 这是如何完成的?

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

回答

0

没有直接的方式在Libgdx(或OpenGL)中做非矩形蒙版。不过,还有很多替代技术。

根据您的要求,只需在软件中进行遮罩(生成具有适当像素集的新Pixmap)可能就足够了。

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

见mattdesl的LibGDX屏蔽维基了解更多详情,其他选项,例:https://github.com/mattdesl/lwjgl-basics/wiki/LibGDX-Masking#complex-masks

+0

感谢awser。我会尝试。 –