gdx实现遮罩特效

效果图

原图
遮罩图,蓝色部分其实是没有像素的,为了在文章里面显示方便,手动填充了蓝色颜色
最后得到的效果图

实现

@Overridepublic void update(float dt) {    
  batch.begin();    
  drawBackground(batch);    
  //画遮罩    
  drawAlphaMask(batch);    
  //画前景色    
  drawForeground(batch, 0, 0, mask.getWidth(), mask.getHeight());    
  batch.end();
  }

画遮罩

  private void drawAlphaMask(SpriteBatch batch) {    
  Gdx.gl.glColorMask(false, false, false, true);    
  //change the blending function for our alpha map    
  batch.setBlendFunction(GL20.GL_ONE, GL20.GL_ZERO);   
   //draw alpha mask sprite(s)    
  batch.draw(mask, 0, 0, mask.getWidth(), mask.getHeight());   
   //flush the batch to the GPU    batch.flush();
  }

画需要裁剪的sprite

private void drawForeground(SpriteBatch batch, int clipX, int clipY, int clipWidth, int clipHeight) {  
  Gdx.gl.glColorMask(true, true, true, true);    
  batch.setBlendFunction(GL20.GL_DST_ALPHA, GL20.GL_ONE_MINUS_DST_ALPHA);    
  Gdx.gl.glEnable(GL20.GL_SCISSOR_TEST);   
   Gdx.gl.glScissor(clipX, clipY, clipWidth , clipHeight);    
  batch.draw(img, 240 - img.getWidth() / 2f, 160 - img.getHeight() / 2f);    
  batch.flush();    
  Gdx.gl.glDisable(GL20.GL_SCISSOR_TEST);
}

代码

https://github.com/tianqiujie/gdxplayground/tree/master/core/src/org/flixel/screens/MaskTest.java

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 从前说棉麻多为妈妈装奶奶范儿,如今棉麻情缘再续,为的却是品位二字,看似无关流行,与优雅蜕变的联系却颇深,回头再看妈...
    闺蜜阅读 3,582评论 0 1
  • 昨晚又做梦了,梦里相同的人,相似的剧情,一直缠绕在脑海。梦醒后,忍不住想拍自己一巴掌,十多年了,梦里人早已没有联系...
    幸福你保证阅读 1,176评论 0 0
  • 我是罗胖所有拥趸里面较早发现,并对他关注的一批人了,从最初第一季“向死而生”、“逃离北上广的另类思考”、“如何爱国...
    快乐糊涂虫阅读 1,924评论 0 0
  • 2012年11月1日《金城灵宝》 杨泽平 “东、西古驿、杨家湾,刮起黄风不见...
    窗外白杨阅读 4,858评论 1 1