cocos2d-lua 图片裁剪自定义形状
2017-05-05 10:21
357 查看
有两种方法一种是用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 clipNodeEx
end
另一种是用renderTexture进行裁剪
--对纹理进行裁剪 裁剪的图片路径spritePath 裁剪的形状图片路径maskPath
function 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 retSprite
end
第一种方法可以根据imageview的尺寸自适应,不过有个bug,如果有弹出窗的层级高于在遮罩图片的被创建前父节点的层级,当遮罩图片被创建以后,弹出窗也会被遮罩裁剪
第二种方法则是在利用需要裁剪的图片纹理,重新创建了一个裁剪图片,因此图片的大小是相对于纹理的尺寸,大小需要手动进行设置
--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 clipNodeEx
end
另一种是用renderTexture进行裁剪
--对纹理进行裁剪 裁剪的图片路径spritePath 裁剪的形状图片路径maskPath
function 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 retSprite
end
第一种方法可以根据imageview的尺寸自适应,不过有个bug,如果有弹出窗的层级高于在遮罩图片的被创建前父节点的层级,当遮罩图片被创建以后,弹出窗也会被遮罩裁剪
第二种方法则是在利用需要裁剪的图片纹理,重新创建了一个裁剪图片,因此图片的大小是相对于纹理的尺寸,大小需要手动进行设置
相关文章推荐
- 自定义之一个图片根据另一个图片形状进行裁剪
- cocos2d-x-lua如何导出自定义类到lua脚本环境
- Tengine + Lua + GraphicsMagick 实现图片自动裁剪/缩放
- cocos2d-js 粒子系统使用自定义图片,还原原来的图片宽高
- 【Cocos2d-x 手游研发小技巧】图片资源加密,Lua文件加密
- [Android] 图片裁剪总结——自定义裁剪工具
- 免费的Photoshop自定义形状图片集合分享
- Cocos2d-x下Lua调用自定义C++类和函数的最佳实践
- 【Cocos2d-x Lua】自定义TableView
- Cocos2d-x下Lua调用自定义C++类和函数的最佳实践 -- 转
- Qt中如何利用 png 图片来实现自定义形状的窗口
- 复制powerpoint2007自定义形状粘贴到word2007里变成图片,怎么解决?
- 在quick-cocos2d-x中添加自定义的类给lua使用
- cocos2d-x 2.2.2 在lua中更换CCSprite的图片
- cocos2d-x lua 自定义TableView
- cocos2d-x-lua如何导出自定义类到lua脚本环境
- 安卓自定义按钮图片 和形状
- Android 相册图片选取+自定义裁剪方式(非系统裁剪)
- (原创)cocos2d-x 3.0+ lua 学习和工作(1) : 自定义创建对象方法
- Cocos2d-x下Lua调用自定义C++类和函数的最佳实践