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




更多相关文章

  1. Android(安卓)Webkit中DocumentWriter模块分析
  2. android头像设置:从本地照片库或拍照获取并剪裁
  3. Android动画介绍汇总
  4. TextView获取父控件的绘图状态
  5. Android一个TextView设置多种颜色的2种高效方法
  6. Android(安卓)访问WebService
  7. Mono for Android(安卓)实现高效的导航
  8. Android中通知的使用
  9. Android(安卓)Gallery3d源码学习总结(二)——绘制流程drawThumbnai

随机推荐

  1. Android(安卓)如何将定制的Launcher成为
  2. Android崩溃日志收集是个什么鬼?
  3. 一些Activity小技巧
  4. Android(安卓)signed APK程序正式签名方
  5. Android(安卓)入个门
  6. android之handler使用
  7. J2me游戏如何快速移植到Android(1)
  8. Android兼容性
  9. 微软云游戏服务xCloud将于9月15日登陆And
  10. Android(安卓)Service生命周期及用法!