DIEA
--创建一个touch的半透明layer--priority : touch 权限级别,默认为-1024--touchRect: 在touchRect 区域会放行touch事件 若touchRect = nil 则全屏吃touch--touchCallback: 屏蔽层touch 回调function createMaskLayer( priority,touchRect ,touchCallback, layerOpacity,highRect)local layer = CCLayer:create()layer:setPosition(ccp(0, 0))layer:setAnchorPoint(ccp(0, 0))layer:setTouchEnabled(true)layer:setTouchPriority(priority or -1024)layer:registerScriptTouchHandler(function ( eventType,x,y )if(eventType == "began") thenif(touchRect == nil) thenif(touchCallback ~= nil) thentouchCallback()endreturn trueelseif(touchRect:containsPoint(ccp(x,y))) thenreturn falseelseif(touchCallback ~= nil) thentouchCallback()endreturn trueendendendprint(eventType)end,false, priority or -1024, true)local gw,gh = g_winSize.width, g_winSize.heightif(touchRect == nil) thenlocal layerColor = CCLayerColor:create(ccc4(0,0,0,layerOpacity or 150),gw,gh)layerColor:setPosition(ccp(0,0))layerColor:setAnchorPoint(ccp(0,0))layer:addChild(layerColor)return layerelselocal ox,oy,ow,oh = touchRect.origin.x, touchRect.origin.y, touchRect.size.width, touchRect.size.heightlocal layerColor = CCLayerColor:create(ccc4(0, 0, 0, layerOpacity or 150 ), gw, gh)local clipNode = CCClippingNode:create();clipNode:setInverted(true)clipNode:addChild(layerColor)local stencilNode = CCNode:create()-- stencilNode:retain()local node = CCScale9Sprite:create("bg.png");node:setContentSize(CCSizeMake(ow, oh))node:setAnchorPoint(ccp(0, 0))node:setPosition(ccp(ox, oy))stencilNode:addChild(node)if(highRect ~= nil) thenlocal highNode = CCScale9Sprite:create("bg.png");highNode:setContentSize(CCSizeMake(highRect.size.width, highRect.size.height))highNode:setAnchorPoint(ccp(0, 0))highNode:setPosition(ccp(highRect.origin.x, highRect.origin.y))stencilNode:addChild(highNode)endclipNode:setStencil(stencilNode)clipNode:setAlphaThreshold(0.5)layer:addChild(clipNode)endreturn layerend