首页 > 代码库 > cocos2dx 遮罩层 android 手机上 失败
cocos2dx 遮罩层 android 手机上 失败
1.CCClippingNode使用(在模拟器上ok,在手机上不行),实现多个剪切区域
--/*创建剪裁节点*/
local pClip=CCClippingNode:create()
pClip:setInverted(true)--;//设置是否反向,将决定画出来的圆是透明的还是黑色的
pClip:setAlphaThreshold(0.0)
self:addChild(pClip)
--/*注意将LayerColor层添加到剪裁节点上*/
pClip:addChild(layer)
local stencilNode = display.newNode()
stencilNode:setAnchorPoint(ccp(0,0))
stencilNode:setPosition(ccp(0,0))
--/*绘制圆形区域*/
local radius=NODE_PADDING/2+10--;//设置圆的半径
local nCount=200--;//设置顶点数,此处我们将圆看成200边型
local angel=2.0*3.14/nCount
local points = CCPointArray:create(nCount)
for i=0, nCount-1 do
local radian=i*angel
points:add(ccp(radius * math.cos(radian),radius * math.sin(radian)))
end
--/*通过绘制多边形来实现圆*/
-- 创建 CCPolygonShape 对象
local stencil_1 = CCPolygonShape:create(points)
stencil_1:setFill(true) -- 填充
stencil_1:setClose(true) --闭合
stencil_1:setPosition(ccp(x1, y1))
stencilNode:addChild(stencil_1)
--增加一个图片的剪切区域
local stencil_2= display.newSprite("light.png")
stencil_1:setPosition(ccp(x2, y2))
stencilNode:addChild(stencil_2)
pClip:setStencil(stencilNode)
2.重点来了,这个才可以在手机上用
function game:mask()
local function setBlend(obj, src, dst)
local b = ccBlendFunc:new()
b.src = http://www.mamicode.com/src
b.dst = dst
obj:setBlendFunc(b)
end
--背景
local node = display.newNode():zorder(10000)
local layer = display.newColorLayer(ccc4(0,0,0,0))
node:addChild(layer)
--node:setContentSize(CCSize(1000, 1000))
local myLayer = display.newColorLayer(ccc4(0,0,0,175))
--创建遮罩图片
local pMask
pMask = display.newSprite("#bun_1_1.png")
pMask:setScaleX(1.5)
pMask:setScaleY(1.5)--设置一下缩放
pMask:setAnchorPoint(ccp(0,0))
pMask:setPosition(display.cx, display.cy)
--设置混合模式
setBlend(pMask, GL_ZERO, GL_ONE_MINUS_SRC_ALPHA)
--创建干净的画板
local pRt = CCRenderTexture:create(CONFIG_SCREEN_WIDTH, CONFIG_SCREEN_HEIGHT)
self:addChild(pRt);
pRt:setPosition(CONFIG_SCREEN_WIDTH/2, CONFIG_SCREEN_HEIGHT/2)
--开始绘制
pRt:begin()
myLayer:visit()
--if pData then
pMask:visit()
--end
pRt:endToLua()
--self:addChild(myLayer)
-- 启用触摸
-- function onTouch(event, x, y)
--echoInfo(string.format("# onTouch111 X = %s", x))
-- echoInfo(string.format("# onTouch 111Y = %s", y))
-- if x > display.cx - 100 and x < display.cx + 100 and y > display.cy - 100 and y < display.cy + 100 then
-- node:removeFromParent()
-- pRt:removeFromParent()
--end
--return true
-- end
--开启触摸
-- node:setTouchEnabled(true)
--node:addTouchEventListener(onTouch)
--node:setNodeEventEnabled(true)
--self:addChild(node,1000)
end