本节课视频地址:
一.Layer接收用户的输入事件
上节课我们学习了Layer的创建,以及理解了Layer层级关系,这节课我们就来学习了Layer对用户输入事件的接收,以及层级关系对层接收输入事件的影响。
Layer在可以接收用户的三种输入事件,触摸操作,输入操作,和加速度计。触摸操作指的就是用户通过手指点击屏幕的操作,输入操作指的就是用户通过虚拟键盘进行的输入文字的操作,加速度计就是用户通过倾斜或者摇动手机的操作,对这种操作大家应该都不陌生,在赛车游戏中,我们通过倾斜手机来控制赛车的转弯方向,就是使用对加速度计的输入进行出来来实现的。
下面我们通过代码来讲解Layer对用户输入操作的接收是如何实现的。这里我们首先来讲解一下Layer接收用户的触摸操作。
二.Layer对用户触摸操作的接收
下面来讲解一下单点触摸,首先在HelloWorld的头文件中重写单点触摸的四个函数,代码如下:
通过注释可以看出这四个函数的作用,这里就不在重复讲解了。
然后在HelloWorld的源文件中去绑定触摸监听对象,代码如下:
通过上面的代码可以看出首先我们创建了一个触摸监听对象,然后对它进行了四个触摸函数的绑定,最后把这个触摸监听对象添加到了事件调度器中,让事件调度器进行统一管理。Cocos2d-x3.0之后的版本的事件分发机制取代了之前的通过代理模式,把事件处理的逻辑分离出来,并通过不同的事件监听器来监听事件,点一个节点接收到一个事件后,机会指派一个事件分发器,也就是_eventDisptcher专门来分发这些事件。
接下来我们来实现我们在头文件中声明的四个触摸监听相关的函数 ,代码如下:
从上面的代码可以看到,我们在四个函数中都打印了函数的名字,以及在执行该函数时我们触摸的坐标。
有一点要特别注意就是,onTouchCancell的这个函数,它的使用场景,他是个很奇葩的存在,一般的情况下根本不会被调用,那么你可能会问二般情况下它会不会被调用呢,我只能告诉你它只有在我们正在触摸的时候,手机的home按键被点到,这个时候才有可能会触发这个函数,大家可以想象一下,这个种情况其实是很少出现的,所以说这个函数在大多数情况下并没有什么卵用,但是大家要记住这个唯一用到的场景,因为面试的时候面试官就爱问这些偏门的知识,如果你能回答出来,说不定就给你发offer了呢,哈哈。
三.触摸函数的调用顺序
写完上述代码之后,我们运行我们的项目,模拟器弹出之后,我们在游戏中轻轻的滑动一小段距离,会出现如下打印,如图:
我们可以看到,在我们整个触摸过程中,首先调用了onTouchBegan这个函数,并打印了一个点的坐标,紧接着就进入了onTouchMoved这个函数中,并随着鼠标指针的移动不断的调用onTouchMoved函数并打印移动到的位置坐标,指到我们松开我们的鼠标指针,就会调用到了onTouchEnded函数,并打印了一个触摸结束的位置坐标。从打印的结果不难看出,触摸监听的整个过程就是先调用一次onTouchBegan,紧接着会一直随着不停的移动一直调用onTouchMoved函数,最后我们抬起手指或者松开鼠标的时候,也就是触摸结束,就会调用一次onTouchEnded函数。
上面的通过打印我们应该能明白触摸相关的函数的调用顺序了。但是只是打印并不能形象的展现触摸监听的实际运用,下面我们来实现一个小游戏让大家见识一下触摸监听其实是个很好玩的东东哦。代码如下:
首先在init方法中创建一个Sprite,并这是该Sprite的tag值为10。
然后我们在onTouchBegan和onTouchMoved中分别实现了让这个Sprite移动的代码,代码如下:
通过代码注释,我们应该能理解这个代码的作用,setPositon这个函数我们在讲解Sprite的时候已经进行了详细讲解,大家应该还有记忆,如果忘了的话请回头在学习一下那节课。通过以上代码的编写,我们就能实现点击那里,sprite1机会移动到哪儿,并随着我们在屏幕的滑动而跟随滑动,具体效果截图是看不出来的,那我们应该去哪儿看呢,这个大家应该都知道吧,就是我们火云开发课堂的cocos2d-x基础视频有这节课的对应教学视频哦,通过教学视频我们就可以看到实际的运行效果了。
四.触摸事件的总结
触摸事件在以后的工作中会经常被用到,是一个比较有用的知识点,而且每个游戏都会用到该知识点,例如:在《全民飞机大战》中飞机会跟随着手指的移动而移动,就是一个触摸事件监听的典型案例。
五.作业:
1,创建一个sprite,让该sprite能跟随着你鼠标指针的移动而移动。
原文链接:https://www.f2er.com/cocos2dx/341337.html