加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

quick-cocos2d-x游戏开发【11】——多点触摸

发布时间:2020-12-14 21:07:58 所属栏目:百科 来源:网络整理
导读:在前面已经谈过单点触摸的用法了,所以对于多点触摸来说,也是非常简单容易的。 多点触摸其拥有added,removed这么两个独有事件。 added 屏幕中增加了一个触点 removed 屏幕中移除了一个触点 另外,还有这么一个event.points 屏幕中全部触点信息, 每一个触

在前面已经谈过单点触摸的用法了,所以对于多点触摸来说,也是非常简单容易的。


多点触摸其拥有added,removed这么两个独有事件。

added 屏幕中增加了一个触点

removed 屏幕中移除了一个触点


另外,还有这么一个event.points 屏幕中全部触点信息,

每一个触点依然可以获取到其,

point.x,point.y 触摸点的当前位置
point.prevX,point.prevY 触摸点之前的位置
point.id 触摸点 id,用于确定触摸点的变化


结合单点触摸的几个事件,所以多点触摸事件发生时,会有began,added,moved,removed,ended,canclled这些响应事件。

你可能会疑惑began和added触发的顺序,我们在使用cocos2d-x c++的时候,多点触摸还是写在began当中,只是触摸点参数是一个集合,包含了全部触点的信息。但在quick中,将多点信息封装得更加方便。当第一个触点触摸到屏幕时,响应的是began事件,之后再有触点在屏幕时,就会触发added事件了,这样一来,我们就能清楚的知道玩家什么时候第二个手指也接触到屏幕了。如果在c++中,就需要再写些代码来判断了。


因此,removed和ended响应事件也就容易理解了触发顺序了,当有触点离开屏幕时,只要event.points中触点的个数大于等于2,那么会响应removed事件,当屏幕中最后一个触点离开时,会响应ended事件。


对于event.points中每个触点的信息,我们通过循环就可以依次获取了。

[html] view plain copy
  1. forid,pointinpairs(event.points)do
  2. printf("%d,%f,%f",id,event.points[id].x,event.points[id].y)
  3. end


是不是很简单,好了,咱们来个完整点的代码,

    functionMyScene:ctor()
  1. locallayer=display.newLayer()
  2. self:addChild(layer)
  3. layer:setTouchEnabled(true)
  4. layer:setTouchMode(cc.TOUCH_MODE_ALL_AT_ONCE)
  5. layer:addNodeEventListener(cc.NODE_TOUCH_EVENT,function(event)
  6. ifevent.name=="began"orevent.name=="added"then
  7. forid,pointinpairs(event.points)do
  8. end
  9. elseifevent.name=="removed"then
  10. print("touchremoved")
  11. elseifevent.name=="moved"then
  12. print("touchmoved")
  13. elseifevent.name=="ended"then
  14. print("touchended")
  15. end
  16. returntrue
  17. end)
  18. end

不过这个测试,只有放到真机上检验了,quick的模拟器还只能做单点检测。


此外,还要说明的一个就是,单点和多点触摸的区域,一旦一个node上有多个精灵,那么它的触摸响应区域则是它们共同区域的大小,下图中红色区域的大小。


这里要更正一个小问题,在第二节创建场景中,newScene的参数是场景的名称,这里需要和创建的lua文件名称相同,否则虽然在模拟器中运行没有问题,在android设备上就会提示没有找到这个lua文件。

所以我们之前创建的MyScene.lua文件,里面的代码需要更正下。

    localMyScene=class("MyScene",function()
  1. returndisplay.newScene("MyScene")--场景名称要一致
  2. end)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读