觸摸事件
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);
},
