對於遊戲來說,觸控事件是最重要的遊戲方式,基本上所有的遊戲都是基於觸控事件完成的,不過觸控事件也是遊戲最基礎的事件反饋。cocos2d-x基本上沿襲cocos2d的觸控事件處理方式,下面就簡單介紹一下。一般來說,每乙個遊戲場景都有乙個或幾個layer組成,把場景分成layer是為了當遊戲的元素增多後方便遊戲的管理,這樣遊戲的擴充套件性也很強,如果單獨在乙個scene中處理整個遊戲的元素就顯得十分冗雜,而且擴充套件性差了很多。當然有時候一些很簡單的介面還是可以不使用layer直接進行處理的,當然這樣做是不推薦的。
1.如果類不是繼承自cclayer的話,要接受和處理觸控事件要很簡單。首先要設定這個類可以接收觸控,在類的init()函式中加入setistouchedenable(true),接著重寫觸控事件的處理函式。當手指首次觸控到螢幕時呼叫的方法:
-(void) cctouchesbegan(ccset *touches,ccevent *pevent);
手指在螢幕上移動時呼叫的方法:
-(void) cctouchesmoved(ccset *touches,ccevent *pevent);
當手指從螢幕上提起時呼叫的方法:
-(void) cctouchesended(ccset *touches,ccevent *pevent);
當觸控事件被取消時呼叫的方法(例如在切水果的時候手指滑到螢幕以外):
-(void) cctouchescancelled(ccset *touches,ccevent *pevent);
cctouchescancelled()方法一般不重寫,因為一般情況下沒什麼用,除非遊戲的需要。這幾個函式的引數分別是觸控的點集和觸控響應事件,cctouch* touch用於單點觸控,ccset* touches用於多點觸控,響應事件一般都要從點集中取出點,然後得到對應的螢幕上的座標,最後轉換成opengl的座標,對於多點觸控來說,可以從點集中取出任意一點。中間的兩步很重要,ccpoint location = touch->locationinview();location = ccdirector::shareddirector()->converttogl(location);,這兩個函式完成了座標的轉換,遊戲中座標系的概念很重要,特別是到後面接觸的遊戲型別比較多時,在地圖類的遊戲中會涉及到nodespace以及worldspace等概念,總之如果能深入地理解這些概念的意義,在你寫遊戲過程如果遇到一些奇怪的問題就能很好地解決。
2.如果是層layer來接受觸控,就要多加一步註冊cctouchdispatcher來讓layer處理touch事件。
在寫切水果遊戲的時候就特別需要對觸控事件進行比較深入地處理,這樣才能畫出比較好看的刀痕,我的刀痕是採用兩層刀痕,下面一層是白色的一層,上面是粉紅色的一層,限制刀痕的長度,乙個8個點為單位連線刀痕,並對刀痕連線的處的比較機械的連線做一些處理,使得轉彎的部分更加連貫。
cocos2dx 觸控相關記錄
簡單2句話 settouchenabled true 啟用觸控 ccdirector shareddirector gettouchdispatcher addtargeteddelegate this,0,true 新增觸控 優先順序值越小,越優先響應 同樣優先順序,後新增的先響應 多點觸控 ad...
cocos2d x 觸控簡單分析
cclayer中的settouchenabled true 會開啟多點觸控。如果使用ccdirector shareddirector gettouchdispatcher addtargeteddelegate this,0,true 只會開啟乙個點的觸控。當helloworld cctouchb...
cocos2d x,螢幕觸控事情
auto listener eventlistenertouchonebyone create listener ontouchbegan touch touch,event event listener ontouchmoved touch touch,event event listener o...