Cocos2d实现刮刮卡效果


Posted in Javascript onDecember 20, 2018

本文实例为大家分享了Cocos2d实现刮刮卡效果展示的具体代码,供大家参考,具体内容如下

本文代码适用于Cocos2d-x Quick-Community3.6

local TestScene = class("TestScene", function()
 return display.newScene("TestScene")
end)

function TestScene:ctor()
 
end

function TestScene:onEnter()
 self:initUI()
end

function TestScene:initUI()
 --刮刮卡底层容器
 local scratchLayer = display.newLayer()
 scratchLayer:setContentSize(self:getBoundingBox())
 self:addChild(scratchLayer)

 scratchLayer:setTouchEnabled(true)
 scratchLayer:setTouchMode(cc.TOUCH_MODE_ONE_BY_ONE)

 --创建RenderTexture
 local scratch = cc.RenderTexture:create(scratchLayer:getBoundingBox().width,scratchLayer:getBoundingBox().height)
 scratch:setPosition(scratchLayer:getBoundingBox().width/2,scratchLayer:getBoundingBox().height/2)
 scratch:retain()

 --需要被挂掉的精灵 本文以纯白背景代替
 local bg = cc.Sprite:createWithTexture(nil, cc.rect(0,0 , scratchLayer:getBoundingBox().width,scratchLayer:getBoundingBox().height))
 bg:setColor(cc.c3b(255,255,255))
 bg:setPosition(scratchLayer:getBoundingBox().width/2,scratchLayer:getBoundingBox().height/2)

 --渲染
 scratch:begin()
 bg:visit()
 scratch:endToLua()

 scratchLayer:addChild(scratch)

 --利用DrawNode创建模拟的刮除媒介
 local eraser = cc.DrawNode:create()
 --刮除媒介是个圆 半径为20 具体可自行定义
 local r = 20

 eraser:drawSolidCircle(cc.p(0,0),
 r,
 0,
 r,
 1,
 1,
 cc.c4f(0,0,0,0)
 )

 eraser:retain()

 --开始添加触摸事件
 scratchLayer:addNodeEventListener(cc.NODE_TOUCH_EVENT, function (event)
 --首先把点击区域刮除
 eraser:setPosition(event.x,event.y)

 eraser:setBlendFunc(gl.ONE,gl.ZERO)

 scratch:begin()
 eraser:visit()

 --[[
  重点:因为点击事件回调次数限制,如果没有下面处理,
  当我们快速在屏幕上滑动的时候调用次数不够,会产生一个一个刮除点
  而中间并没有刮除。
  以下代码为刮除两次移动中间矩形区域
 ]]
 local isEnded = false
 if event.name ~= "began" then
  if eraser.lastPos then
  --矩形宽高
  local width = self:getP2PDis(event, eraser.lastPos)
  local height = 2*r
  --矩形中点
  local midPos = cc.p((event.x+eraser.lastPos.x)/2,(event.y+eraser.lastPos.y)/2)
  --旋转角度
  local rotate = self:getP2PAngle(eraser.lastPos, event)

  --矩形刮除媒介
  local polygonEraser = cc.DrawNode:create()
  local points = {
   cc.p(-width/2,-height/2),
   cc.p(-width/2,height/2),
   cc.p(width/2,height/2),
   cc.p(width/2,-height/2)
  }
  polygonEraser:drawPolygon(points, {
   fillColor = cc.c4f(0, 0, 0, 0),
   borderWidth = 1,
   borderColor = cc.c4f(0, 0, 0, 0),
  })

  --刮除矩形区域
  polygonEraser:setRotation(-rotate)

  polygonEraser:setPosition(midPos)

  polygonEraser:setBlendFunc(gl.ONE,gl.ZERO)

  polygonEraser:visit()
  scratch:endToLua()
  isEnded = true
  end
 end

 if not isEnded then
  scratch:endToLua()
 end

 eraser.lastPos = cc.p(event.x,event.y)

 if event.name == "ended" then
  eraser.lastPos = nil
 end

 return true
 end)
end

--两点间距
function TestScene:getP2PDis(p1,p2)
 local x = p1.x - p2.x
  local y = p1.y - p2.y
  return math.abs(math.sqrt(math.pow(x,2)+math.pow(y,2)))
end

--两点连接线倾斜角度
function TestScene:getP2PAngle(p1,p2)
  local x = p1.x - p2.x
  local y = p1.y - p2.y
  return 180 * (math.atan2(y, x) / math.pi)
end

return TestScene

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
把textarea中字符串里含有的回车换行替换成<br>的javascript代码
Apr 20 Javascript
javascript高级学习笔记整理
Aug 14 Javascript
Javascript base64编码实现代码
Dec 02 Javascript
原生js 秒表实现代码
Jul 24 Javascript
JavaScript 模式之工厂模式(Factory)应用介绍
Nov 15 Javascript
JS仿iGoogle自定义首页模块拖拽特效的方法
Feb 13 Javascript
Javascript递归打印Document层次关系实例分析
May 15 Javascript
jquery实现全选功能效果的实现代码
May 05 Javascript
深入理解js函数的作用域与this指向
May 28 Javascript
jQuery 实现左右两侧菜单添加、移除功能
Jan 02 jQuery
微信小程序自定义弹窗滚动与页面滚动冲突的解决方法
Jul 16 Javascript
如何手写简易的 Vue Router
Oct 10 Javascript
浅谈Fetch 数据交互方式
Dec 20 #Javascript
cocos2dx+lua实现橡皮擦功能
Dec 20 #Javascript
element-ui table span-method(行合并)的实现代码
Dec 20 #Javascript
fetch 如何实现请求数据
Dec 20 #Javascript
JS闭包经典实例详解
Dec 20 #Javascript
JS闭包原理与应用经典示例
Dec 20 #Javascript
Mint UI组件库CheckList使用及踩坑总结
Dec 20 #Javascript
You might like
php smarty的预保留变量总结
2008/12/04 PHP
PHP 断点续传实例详解
2017/11/11 PHP
Ajax+PHP实现的分类列表框功能示例
2019/02/11 PHP
基于Laravel 多个中间件的执行顺序详解
2019/10/21 PHP
jquery下异步提交表单 异步跨域提交表单
2010/11/17 Javascript
最好用的省市二级联动 原生js实现你值得拥有
2013/09/22 Javascript
JS实现鼠标单击与双击事件共存
2014/03/08 Javascript
js实现网页自动刷新可制作节日倒计时效果
2014/05/27 Javascript
node.js中的fs.fsyncSync方法使用说明
2014/12/15 Javascript
JavaScript实现鼠标滑过处生成气泡的方法
2015/05/16 Javascript
JavaScript的代码编写格式规范指南
2015/12/07 Javascript
关于JS中的方法是否加括号的问题
2016/07/27 Javascript
一个仿微博登陆邮箱提示框js开发案例
2016/07/28 Javascript
javascript中函数的写法实例代码详解
2018/10/28 Javascript
vue 地图可视化 maptalks 篇实例代码详解
2019/05/21 Javascript
学前端,css与javascript重难点浅析
2020/06/11 Javascript
[01:25]2015国际邀请赛最佳短片奖——斧王《拆塔英雄:天赋异禀》
2015/09/22 DOTA
python简单商城购物车实例代码
2018/03/15 Python
使用Python横向合并excel文件的实例
2018/12/11 Python
IntelliJ 中配置 Anaconda的过程图解
2020/06/01 Python
python基于selenium爬取斗鱼弹幕
2021/02/20 Python
CSS3中颜色线性渐变实战
2015/07/18 HTML / CSS
英国最大的百货公司:Harrods
2016/08/18 全球购物
Weekendesk意大利:探索多种引人入胜的周末主题
2016/10/14 全球购物
大学生党课思想汇报
2013/12/29 职场文书
幼儿园毕业家长感言
2014/02/10 职场文书
幼儿园母亲节活动方案
2014/03/10 职场文书
信电学院毕业生自荐书
2014/05/24 职场文书
同学聚会策划方案
2014/06/06 职场文书
纪律教育学习月活动总结
2014/08/27 职场文书
维稳工作承诺书
2015/01/20 职场文书
于丹讲座视频观后感
2015/06/15 职场文书
学生退学证明
2015/06/23 职场文书
2015教师个人师德工作总结
2015/10/23 职场文书
新西兰:最新留学学习计划书写作指南
2019/07/15 职场文书
教你使用Ubuntu搭建DNS服务器
2022/09/23 Servers