Cocos creater事件响应

Cocos creater事件响应

一、事件响应

1.触摸事件:

在cocos creater游戏引擎中我们通常都会用到button组件,button组件主要就是用来实现触摸事件的相关功能响应,而button组件实际就是用到了cc.Touch相关的触摸事件,触摸事件一共有四种:

cc.Node.EventType.TOUCH_START() // 按下时事件
cc.Node.EventType.TOUCH_MOVE// 按住移动后事件
cc.Node.EventType.TOUCH_END // 按下后松开后事件
cc.Node.EventType.TOUCH_CANCEL // 按下取消事件

我们直接上个例子看看它们是如何实现相关功能:

在这里我们直接使用on来监听当前节点的事件响应,on监听事件上有四个参数,第一个参数就是监听的事件类型,第二参数是事件监听后产生的回调函数它的实质是Event.EventCustom中的一个实例,第三个参数就是指将这个监听事件所绑定的节点,这里this就是是指这个所挂载的节点,第四个参数是一个Boolean值它是指在侦听器将在捕获阶段被触发,默认为true所以不写。第二个函数中参数t就是回掉后返回的一个touch触摸信息(所以等下我们就能用它来做一些相关的事情,这里暂时放一边)

 

Ok,创建一个白色的sprite来挂载并开始运行这段代码

运行成功,这里可以看到当我在点击这个白色箱子时star事件就被触发,我在箱子里面点击进行移动的时候move便被触发,最后我在箱子内部弹起鼠标点击后end就被触发,如果是在箱子外面(节点外部)弹其鼠标的时候就会触发cancel事件,这就是简单的触摸事件。

这里面要知道的是我们的触摸是事件是一种向上传递的冒泡事件,冒泡事件就是说如果我在一个子节点产生了触摸,那么这个子节点的父亲节点也能通过监听来接收到这个事件,像水中的泡泡一样会把事件向上传递给包含这个子节点的上层节点,那如果想要阻止事件冒泡就可以通过stopPropagationImmediate()来截断它的向上传递,在这里就需要用到返回的这个touch事件来调用:

然后我们继续通过这个touch来做一些事情,比如实现这个白色箱子的移动,这里就要调用touch中的getDelta()

Ok,那我们就可以实现随意的拖动这个方块了运行看看吧。

 

除了这个函数以外Touch事件还有很多函数比如实现多点触控等功能。要补充一点的是这里既然能监听触摸事件我们也能移除这个监听事件

https://img-blog.csdnimg.cn/20190407130003958.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM3ODcyMTky,size_16,color_FFFFFF,t_70 ​​

这里为了方便移除我们把他抽出来做成一个touch_event函数

这样你就能移除这个监听触摸事件,包括移除所有监听: targetOff(),其他函数可以函数官方的API文档

2.键盘事件:

键盘事件的基本结构跟触摸类似,它主要有两个事件:cc.SystemEvent.EventType.KEY_DOWN和cc.SystemEvent.EventType.KEY_UP,通过cc.systemEvent这个全局实例来监听按键(注意区别两个system的大小写)

cc.systemEvent.on(cc.SystemEvent.EventType.KEY_DOWN,this.key,this)
cc.systemEvent.on(cc.SystemEvent.EventType.KEY_UP,this.key,this)

key(event){
    switch(event.keyCode){
       case cc.macro.KEY.space:
       console.log("key!!!")
       break;
       }

这里可以看到注册了这两个键盘监听事件同样的这里的event就是函数的回调信息keyCode是一个按键码,macro.KEY是一个枚举类型里面封装了所有按键信息,通过switch用keyCode找到对应的之就能实现各种各样的按键触碰(其他按键API参考KEY枚举,这里便不赘述)

3.自定义事件:

在自定义事件中我们可以自己来进行消息的派送和监听,一样的监听我们使用on,而派送我们使用emit或者dispatchEvent来进行,emit和dispathEvent的区别是emit只能用于节点内部监听,不能进行冒泡传递,而dispatchEvent则可以向上进行传递:

运行:

OK,这几个基本上都是我们比较常用的触摸事件,感谢各位大佬阅览

 

 
发布了11 篇原创文章 · 获赞 5 · 访问量 2697

猜你喜欢

转载自blog.csdn.net/qq_37872192/article/details/89066880