cc.Node.事件
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了cc.Node.事件相关的知识,希望对你有一定的参考价值。
触摸事件1.触摸事件的类型:START触摸启动,MOVED移动,ENDED弹起来,CANCEL取消;
ENDED和CANCEL区别是ENDED物体内弹起来,CANCEL是在物体外范围弹起。
2.监听触摸事件,node.on(类型,callback,target(回调函数的this),[useCapture])
3.触摸事件,node.on(类型,callback,target(回调函数的this),[useCapture])
//(1)监听触摸事件 向引擎底层注册回调函数 //当有触摸事件发生等时候,调这个方法 //cc.Node.EventType.TOUCH_START 触摸开始 //(2)回调函数等格式 function(t) t对象是tt.Touch的对象 //这个对象包含的信息有[触摸信息,事件信息]; //(3)target 目标谁来调等callback 哪个对象来调用等这个callback //那就是哪个对象在callback来绑定实例,target就是里面this对象 //最后一个参数默认即可 onLoad: function() { this.node.on(cc.Node.EventType.TOUCH_START, function(t){console.log("cc.Node.EventType.TOUCH_START ")},this) this.node.on(cc.Node.EventType.TOUCH_MOVE, function(t){console.log("cc.Node.EventType.TOUCH_MOVE ")},this) this.node.on(cc.Node.EventType.TOUCH_END, function(t){console.log("cc.Node.EventType.TOUCH_END ")},this) this.node.on(cc.Node.EventType.TOUCH_CANCEL, function(t){console.log("cc.Node.EventType.TOUCH_CANCEL ")},this) },
4.如果这时候 不想监听了 就可以通过off来关闭, 但是你的,
callback不要是匿名函数,要用一个函数对象来保存
on_touch_moved:function(t){ console.log("cc.Node.EventType.TOUCH_END "); },
5.关闭注册
this.node.off(cc.Node.EventType.TOUCH_END, this.on_touch_moved ,this)
6.移除目标上的所有事件
targetoff(target)
7.cc.Touch
getLocation
获取当前触点位置 做下角(0,0)为起始点
getDelta
获取触点距离上一次事件移动的距离对象,对象包含 x 和 y 属性
8.cc.Touch 同时包含 cc.Event事件
父节点移动那么所有的子节点都移动,那也就是("父节点是包含了
整个子节点的一个整体"),那这个整体其中一个成员收到来一个事件,
这时候这事件会向上传递,就是说你的一个子节点有一个事件发生后,
父节点是可以收到等,这个就叫做事件等向上传递,事件冒泡。
如果子节点觉得这是一个私有事件,不想向上传递,想挡住这个事件,
stopPropagationImmediate//立即停止事件传递
stopPropagation停止传递当前事件。
9.按键事件
按键分类:按下EventType.KEY_DOWN,弹起KEY_UP
注册键盘事件
注意systemEvent是小写开头,
大写是类,
小写是全局实例 他的说明是:系统事件单例,方便全局使用.
onLoad: function() { //按键被按下 cc.systemEvent.on(cc.SystemEvent.EventType.KEY_DOWN, this.on_key_down,this); cc.systemEvent.on(cc.SystemEvent.EventType.KEY_UP, this.on_key_up,this); }, on_key_down: function(event){ //获取按键 每个按键对应一个按键码 //event对象带有keyCode 按键码 //按键码在cc.KEY里面定义的 console.log("按下"); switch(event.KeyCode){ case cc.KEY.space: console.log("空格按下"); break; } }, on_key_up: function(event){ switch(event.KeyCode){ case cc.KEY.space: console.log("空格弹起"); break; } },
10.自定义事件
自己定义的事件,比如我要向你发送一个通知.
监听:this.node.on("自定义事件名",function,target,useCapture);
触发(派发事件):emit("事件名",[detail]) 只有自己能收到
冒泡派送:dispatchEvent(new cc.Event.EventCustom("name",是否冒泡传递))
onLoad:function(){ //接收者 //事件类型是自定义字符串等 为事件名字 //回调函数 参数Event.EventCustom的实例 this.node.on("pkg_event",function(e){ console.log("pkg_event"); //输出自定义事件传过来等 自定义数据 console.log(e.detail.name); },this); //end //发送者 直接触发事件 //这种方法不会对事件传播到任何其他对象 //也就是说这个事件只能传给自己 //detail Object 事件的详细数据 //可以传递自定义数据 比如说传一个表 this.node.emit("pkg_event",{name:"下面"}); //end },
如果我们要把这个事件向上发送
//如果这个事件要向上传递,也就是不只是传给自己 ////true向上传递 false不向上传递 var ea = new cc.Event.EventCustom("pkg_event",true); //自定义数据 ea.detail = {name:"小王"}; //指定这个事件向上传递 this.node.dispatchEvent(ea); //end
父节点接收事件 脚本
onLoad :function() { this.node.on("pkg_event",function(e){ console.log("父节点收到冒泡"); console.log(e.detail.name); },this); },
以上是关于cc.Node.事件的主要内容,如果未能解决你的问题,请参考以下文章
quick-cocos2d-x游戏开发13——节点生命周期事件,帧事件等其他事件
Android 事件分发事件分发源码分析 ( Activity 中各层级的事件传递 | Activity -> PhoneWindow -> DecorView -> ViewGroup )(代码片段