cocos2dx+lua实现橡皮擦功能
程序员文章站
2022-03-24 13:01:37
游戏中刮刮乐是怎么实现的?做了一个小例子看了一下。
实现原理:随着触摸点的移动,通过setblendfunc函数设置部分区域的颜色混合(将上层图片透明度为0,底层我们想要...
游戏中刮刮乐是怎么实现的?做了一个小例子看了一下。
实现原理:随着触摸点的移动,通过setblendfunc函数设置部分区域的颜色混合(将上层图片透明度为0,底层我们想要的图片就显示出来)
--橡皮擦功能测试 local function initinfo() local scene = ccscene:create() local layer = cclayer:create() scene:addchild(layer) --擦除后要显示的图片 local tupian = ccsprite:create(root_res .. "set/tip.png") tupian:setposition(ccp(winsizewidth / 2, winsizeheight / 2)) layer:addchild(tupian) --涂层 local tu = ccsprite:create(root_res..'set/user/bg.png') tu:setposition(ccp(winsizewidth/2,winsizeheight/2)) --layer:addchild(tu) --将图层遍历到texture,再将texture加入当前层 local ptex = ccrendertexture:create(1280,720) ptex:setposition(ccp(winsizewidth/2,winsizeheight/2)) layer:addchild(ptex) ptex:begin() tu:visit() ptex:endtolua() --橡皮擦ccdrawnode --point = ccdrawnode:create() --point:drawdot(ccp(0,0),10,ccc4f(0,0,0,0)) local point = ccsprite:create(root_res..'set/labbtn.png') layer:addchild(point) --[[local blend = ccblendfunc() blend.src = 0 blend.dst = 1 tu:setblendfunc(blend)--]] --local blend = tu:getblendfunc() layer:registerscripttouchhandler(function (eventtype,x,y) if eventtype == "began" then cclog("began") return true elseif eventtype == "moved" then cclog("move") point:setposition(x,y) local blend = ccblendfunc() blend.src = 1 blend.dst = 0 point:setblendfunc(blend) ptex:begin() point:visit() ptex:endtolua() elseif eventtype == "ended" then cclog("end") elseif eventtype == "cancelled" then end end,false,-1000,true) layer:settouchenabled(true) return scene end function getinfolayer() ccdirector:shareddirector():replacescene(initinfo()) end
完成后效果如下:(图片都是游戏中随便找的,有点差强人意)
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
上一篇: Atomic原子操作原理剖析
下一篇: JS闭包原理与应用经典示例