首页 > 代码库 > cocos2dx 遮罩层 android 手机上 失败

cocos2dx 遮罩层 android 手机上 失败

1.CCClippingNode使用(在模拟器上ok,在手机上不行),实现多个剪切区域

 local layer=CCLayerColor:create(ccc4(0,0,0,110))
    --/*创建剪裁节点*/
    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