您的位置:首页 > 移动开发 > Cocos引擎

cocos2dx 遮罩层 android 手机上 失败

2014-07-25 12:07 246 查看
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 = 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: