Cocos2d-X的事件分發(3)

課程概述

“Cocos2d-X的事件分發(3)”課程概述

本節課將講述事件分發中比較複雜的觸摸事件與自定義事件,以及其他的一些事件分發相關的知識。

課程筆記

觸摸事件

觸摸事件是手持設備最複雜最重要的事件,首先需要區分多個觸摸點,其次每個觸摸點的事件需要通過多次分發以表示開始、移動、結束、取消等狀態。

cocos2d-X使用EventTouch來表示一個觸摸事件,每個EventTouch記錄了當前屏幕上處於相同狀態(用EventCode表示)的一組觸摸點的集合,由於一個觸摸點在不同狀態會觸發多次事件分發,每個觸摸點包含一個唯一的ID,通過Touch的getID獲取。

Cocos2d-X將觸摸事件對應的是訂閱者分爲兩種,一種是EventListenerTouchAllAtOnce,表示一個多點觸摸事件的訂閱者,含有4個回調函數,每個狀態的回調函數都包含當前所有處於該狀態的觸摸點,需要用觸摸點的ID來區分每個觸摸點。另外一種是EventListenerTouchOneByOne,將多個觸摸點分爲多個事件通知,也含有4個回調函數,其中onTouchBegan必須實現,否則接收不到事件通知。如果返回false,則其他回調函數無法相應,反之亦然。如果屏幕上同時有4個觸摸點,則相當於調用了4次EventListenerTouchOneByOne,如果不希望這樣,可以類似menu那樣做一些判斷機制。如果希望阻止觸摸點向後面訂閱者繼續分發,可以在onTouchBegan返回true的情況下,調用setSwallowTouches(true)。

在eventDispatcher內部,先觸發EventListenerTouchOneByOne,然後再觸發EventListenerTouchAllAtOnce。可以通過onTouchBegan和setSwallowTouches來控制觸發的訂閱器。如果使用stopPropagation,只會停止一個事件(一個狀態)。

觸摸點的位置判斷,touch事件傳入類型爲Touch的參數,包含getLocation、getPreviousLocation、getStartLocation、getDelta、getLocationInView、getPreviousLocationInView、getStartLocationInView函數。

元素不可見依然可以接收到觸摸事件,需要在onTouchBegan的時候檢查元素(以及長輩元素)的可見性。

其他系統事件

EventMouse處理鼠標。

EventAcclereation處理重力加速度。

EventKeyBoard處理鍵盤。

EventFocus處理焦點事件。



原文地址:

http://www.geekfaner.com/cocos2d-x/ReadCocos2dxSourceCode24.html


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章