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)
累死累活不说,走马观花反而少了真实体验,