Cocos Creator 確實(shí)可以快速開發(fā)不是很復(fù)雜的游戲,但是cocos creator還是有很多不足的地方,畢竟靠視圖編輯器。作者也是很快的入門了cocos creator的開發(fā)和學(xué)習(xí),學(xué)會(huì)了做簡(jiǎn)單的頁(yè)面。本文也是作者的粗略記錄,歡迎討論,不喜勿噴。
實(shí)現(xiàn)原理:通過(guò)cc.Node.EventType來(lái)監(jiān)聽按下和放開的動(dòng)作,過(guò)程通過(guò)update方法來(lái)監(jiān)聽。是的,就是這么簡(jiǎn)單。
具體步驟:
myButton是需要實(shí)現(xiàn)長(zhǎng)按效果的按鈕;
0.定義一個(gè)boolean值的flag:myButton_flag,如果此值為true表示按鈕被按著的狀態(tài),false表示沒(méi)被按著的狀態(tài)。
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是否被按住的狀態(tài)。
2.update中實(shí)現(xiàn)被按住時(shí)執(zhí)行的方法:
update: function (dt) {
if (this.myButton_flag) {
this.longTouchAction();
}
}
//longTouchAction為自定義方法,其中執(zhí)行自己的操作。
問(wèn)題:update方法是根據(jù)fps來(lái)更新的,假設(shè)fps是60幀/每秒(實(shí)際這個(gè)是不定的),也就是每秒要執(zhí)行60次這個(gè)方法;因此這是不切實(shí)際的,所以要控制執(zhí)行l(wèi)ongTouchAction方法的時(shí)機(jī)。
解決:通常長(zhǎng)按操作的需求也是重復(fù)執(zhí)行某個(gè)操作,例如持續(xù)加分。于是可以改為:
//定義一個(gè)longTouch_delta來(lái)計(jì)數(shù)時(shí)間float類型
update: function (dt) {
if (this.myButton_flag) {
this.longTouch_delta += dt;//dt為每幀切換的時(shí)間
if (this.longTouch_delta>0.5) {//大于0.5秒就執(zhí)行一次longTouchAction方法
this.longTouchAction();
this.longTouch_delta = 0;//執(zhí)行一次后把時(shí)間計(jì)數(shù)清0
}
}
}
好了,說(shuō)起來(lái)挺簡(jiǎn)單的,但是要用文字描述清楚還是挺困難的,寫作能力需求提高,見諒。
如有不同的意見,歡迎留言指正。