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

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 從前說棉麻多為媽媽裝奶奶范兒,如今棉麻情緣再續,為的卻是品位二字,看似無關流行,與優雅蛻變的聯系卻頗深,回頭再看媽...
    閨蜜閱讀 579評論 0 1
  • 昨晚又做夢了,夢里相同的人,相似的劇情,一直纏繞在腦海。夢醒后,忍不住想拍自己一巴掌,十多年了,夢里人早已沒有聯系...
    幸福你保證閱讀 172評論 0 0
  • 我是羅胖所有擁躉里面較早發現,并對他關注的一批人了,從最初第一季“向死而生”、“逃離北上廣的另類思考”、“如何愛國...
    快樂糊涂蟲閱讀 293評論 0 0
  • 2012年11月1日《金城靈寶》 楊澤平 “東、西古驛、楊家灣,刮起黃風不見...
    窗外白楊閱讀 1,183評論 1 1