Cocos Creator事件系统
canvas和Main Camera
canvas主要用来场景的适配,所以最好把所有的UI和可渲染节点放在canvas的节点下
Main Camera是用来控制游戏显示的范围和位置(视角)
计时器
定时进行某些操作
1、开启定时计时器
onLoad(){
this.schedule(
function(){
函数体
}
,5)//两个参数,一个局部函数函数,一个时间,每5s执行一次
this.scheduleOne(
function(){
函数体
},5)//5s后执行,只执行一次
this.schedule(
this.callFun()
,5)//每5s执行一次callFun()
}
callFun(){
函数体
}
2、关闭定时计时器
this.scheduleOne(
function(){
this.unshedule(this.callFun);//参数是回调函数
},5).bind(this)//5s后执行,只执行一次,其中bind(this)为绑定this,关闭一个定时器
this.unsheduleAllCallbacks();//关闭当前所有的计时器
事件系统
事件发生发送给事件分发器,再由事件分发器发给事件监听,再由事件监听回调函数处理
事件->事件分发器->事件监听->由回调函数处理
事件可以多个发送,也有多个监听器来处理,根据事件的类型来分发。
鼠标事件
五种情况
//按下
cc.Node.EventType.MOUSE_DOWN
//松开
cc.Node.EventType.MOUSE_UP
//进入节点范围
cc.Node.EventType.MOUSE_ENTER
//离开节点范围
cc.Node.EventType.MOUSE_LEAVE
//滚轮
cc.Node.EventType.MOUSE_WHEEL
例子:
this.node.on(cc.Node.EventType.MOUSE_DOWN,function(event){
//返回点下的坐标
console.log("鼠标按下"+event.getLocation());
//返回点下的x坐标
console.log("鼠标按下"+event.getLocationX());
//判断是否为左键
if(event.getButton == cc.Event.EventMouse.BUTTON_LEFT)
//判断是否为右键
if(event.getButton == cc.Event.EventMouse.BUTTON_RIGHT)
})
//停止监听
this.node.off(cc.Node.EventType.MOUSE_DOWN)
触摸事件
四种情况
//点下
cc.Node.EventType.TOUCH_START
//松开
cc.Node.EventType.TOUCH_END
//按下的同时移出范围
cc.Node.EventType.TOUCH_CANCEL
//移动
cc.Node.EventType.TOUCH_MOVE
this.node.on(cc.Node.EventType.TOUCH_START,function(event){
//返回触摸的ID,可以实现多点触摸
event.getID()
//返回坐标
evetn.getLocation()
})
键盘事件
两种情况
//按下
cc.SystemEvent.EventType.KET_DOWN
//松开
cc.SystemEvent.EventType.KET_UP
cc.systemEvent.on(cc.SystemEvent.EventType.KET_DOWN,function(event){
if(event.keyCode == cc.macro.KEY.w){
console.log("w");
}
});
自定义事件
onLoad(){
let ec = new cc.EventTarget();//创建事件
ec.on("DEAD",function(){
函数体
});//接收事件,参数1为事件名,参数2为事件回调函数
ec.on("DEAD",()=>{
函数体
});//接收事件,参数1为事件名,参数2为事件回调函数
}
ec.emit("DEAD");//事件发送,参数1事件名字,后续参数是回调函数的参数
ec.emit("DEAD",1,2,3,4);//和接收事件的回调函数的参数数量相同
ec.dispatchEvent(new cc.Event.EventCustom("事件名",true));//事件分发,可以传递给不同的节点,true表示用冒泡的方式传递,不好用
取消监听
ec.off("DEAD");//参数为事件类型