Cocos2dx-lua製作遮罩

cocos2dx的資源文件有兩種存在方式(只代表我在實戰項目中用到的):單個圖片文件和plist文件

因項目原因一個項目中兩種資源形式並存,所以在生成CCSprite時,涉及兩種構建的方式,構建ccsprite的方式不同,對應生成遮罩的方法也不同。Cocos2dx-lua 中提供了生成遮罩的方法,但是在具體的項目中,未必能滿足項目的需求。我所參於的項目是模擬經營類的,需要根據不同圖片,動態生成遮罩,所以使用display.newMaskedSprite(__mask, __pic)時就無法滿足項目需求。接下來我把display.newMaskedSprite改進方法簡單介紹下。

首先生成遮罩的Texture,這個核心代碼不變,使用display.newMaskedSprite提供的代碼:

          local __mb = ccBlendFunc()
          __mb.src = GL_ONE
          __mb.dst = GL_ZERO

          local __pb = ccBlendFunc()
          __pb.src = GL_DST_ALPHA
          __pb.dst = GL_ZERO

          local __maskSprite = display.newSprite(__mask):align(display.LEFT_BOTTOM, 0, 0)
          __maskSprite:setBlendFunc(__mb)

          local __picSprite = display.newSprite(__pic):align(display.LEFT_BOTTOM, 0, 0)
          __picSprite:setBlendFunc(__pb)

          local __maskSize = __maskSprite:getContentSize()
          local __canva = CCRenderTexture:create(__maskSize.width,__maskSize.height)
          __canva:begin()
          __maskSprite:visit()
          __picSprite:visit()
          __canva:endToLua()

接下來就是如何將生成的Texture應用在原有的CCSprite中:

1、display.newSprite(單個圖片的絕對徑)

          wallSprite:setTexture(__canva:getSprite():getTexture())

2、display.newSprite(plist中定義的圖片key值)

          local frame = CCSpriteFrame:createWithTexture(__canva:getSprite():getTexture(),CCRectMake(0,0,__maskSize.width,__maskSize.height))
          wallSprite:setDisplayFrame(frame)

發佈了42 篇原創文章 · 獲贊 8 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章