有两种方法一种是用clipPingNode来进行遮罩--对节点进行遮罩式裁剪
--picPath and stencilPath 尺寸要一致, 更新节点需要移除之前的节点function cc.exports.exchangeImagetoClipNode(imgNode,picPath,stencilPath,index) imgNode:setVisible(false) local parent = imgNode:getParent() local clipnode = parent:getChildByname("ClipNode"..tostring(index)) if clipnode then clipnode:removeFromParent() end local clipNodeEx = cc.ClipPingNode:create() parent:addChild(clipNodeEx) local maskNode = imgNode:clone() maskNode:loadTexture(picPath,ccui.TextureResType.localType) maskNode:setVisible(true) local sprite = cc.Sprite:create(stencilPath) clipNodeEx:addChild(maskNode) clipNodeEx:setStencil(sprite) maskNode:setposition(imgNode:getposition()) sprite:setposition(imgNode:getposition()) clipNodeEx:setname("ClipNode"..tostring(index)) clipNodeEx:setInverted(true) clipNodeEx:setAlphaThreshold(0.5) return clipNodeExend
另一种是用renderTexture进行裁剪
--对纹理进行裁剪 裁剪的图片路径spritePath 裁剪的形状图片路径maskPathfunction cc.exports.maskedSprite(spritePath,maskPath) local textureSprite = cc.Sprite:create(spritePath) local textureSize = textureSprite:getContentSize() local maskSprite = cc.Sprite:create(maskPath) local maskSize = maskSprite:getContentSize() local renderTexture = cc.RenderTexture:create(maskSize.wIDth,maskSize.height) maskSprite:setposition(cc.p(maskSize.wIDth/2,maskSize.height/2)) textureSprite:setposition(cc.p(textureSize.wIDth/2,textureSize.height/2)) maskSprite:setBlendFunc(cc.blendFunc(GL_ONE,GL_ZERO)) textureSprite:setBlendFunc(cc.blendFunc(GL_DST_Alpha,GL_ZERO)) renderTexture:begin() maskSprite:visit() textureSprite:visit() renderTexture:endTolua() local retSprite = cc.Sprite:createWithTexture(renderTexture:getSprite():getTexture()) retSprite:setFlippedY(true) return retSpriteend
第一种方法可以根据imagevIEw的尺寸自适应,不过有个BUG,如果有d出窗的层级高于在遮罩图片的被创建前父节点的层级,当遮罩图片被创建以后,d出窗也会被遮罩裁剪
第二种方法则是在利用需要裁剪的图片纹理,重新创建了一个裁剪图片,因此图片的大小是相对于纹理的尺寸,大小需要手动进行设置
总结以上是内存溢出为你收集整理的cocos2d-lua 图片裁剪自定义形状全部内容,希望文章能够帮你解决cocos2d-lua 图片裁剪自定义形状所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)