Cocos Creator 確實可以快速開發不是很復雜的游戲,但是cocos creator還是有很多不足的地方,畢竟靠視圖編輯器。作者也是很快的入門了cocos creator的開發和學習,學會了做簡單的頁面。本文也是作者的粗略記錄,歡迎討論,不喜勿噴。
實現原理:通過cc.Node.EventType來監聽按下和放開的動作,過程通過update方法來監聽。是的,就是這么簡單。
具體步驟:
myButton是需要實現長按效果的按鈕;
0.定義一個boolean值的flag:myButton_flag,如果此值為true表示按鈕被按著的狀態,false表示沒被按著的狀態。
1.在生命周期方法的onLoad或onEnable中,給myButton綁定cc.Node.EventType.TOUCH_START 和TOUCH_END事件,如下:
this.myButton.node.on(cc.Node.EventType.TOUCH_START,this.touchStartFun,this);
this.myButton.node.on(cc.Node.EventType.TOUCH_END,this.touchEndFun,this);
其中touchStartFun和touchEndFun為自定義的方法:
touchStartFun:function(event){
var targetNode = event.getCurrentTarget();
if (targetNode == this.myButton.node) {
this.myButton_flag = true;
}
}
touchEndFun:function(event){
var targetNode = event.getCurrentTarget();
if (targetNode == this.myButton.node) {
this.myButton_flag = false;
}
}
//touchStartFun和touchEndFun分別改變myButton是否被按住的狀態。
2.update中實現被按住時執行的方法:
update: function (dt) {
if (this.myButton_flag) {
this.longTouchAction();
}
}
//longTouchAction為自定義方法,其中執行自己的操作。
問題:update方法是根據fps來更新的,假設fps是60幀/每秒(實際這個是不定的),也就是每秒要執行60次這個方法;因此這是不切實際的,所以要控制執行longTouchAction方法的時機。
解決:通常長按操作的需求也是重復執行某個操作,例如持續加分。于是可以改為:
//定義一個longTouch_delta來計數時間float類型
update: function (dt) {
if (this.myButton_flag) {
this.longTouch_delta += dt;//dt為每幀切換的時間
if (this.longTouch_delta>0.5) {//大于0.5秒就執行一次longTouchAction方法
this.longTouchAction();
this.longTouch_delta = 0;//執行一次后把時間計數清0
}
}
}
好了,說起來挺簡單的,但是要用文字描述清楚還是挺困難的,寫作能力需求提高,見諒。
如有不同的意見,歡迎留言指正。