1. 程式人生 > >Cocos2d-x的學習 觸碰事件老版本和新版本的對比 第一節

Cocos2d-x的學習 觸碰事件老版本和新版本的對比 第一節

版本:cocos2d-x 2.2.2/3.10  語言:C++/Lua

今天把主程大大派發下來的任務完成了,稍微偷會懶寫寫部落格,哈哈。

事件派發機制,我在自學的時候一直使用的是先搞個listener,再在裡面onTouchBegan等於一個lambda表示式寫具體的處理,最後新增監聽就完畢了。可是回到2.0的版本就懵逼了,我的listener呢,被吃了嗎?

首先說一下,3.0相關的處理還有一種方法,就是繼承Layer類,然後在裡面寫virtual onTouchBegan等方法,最後使用setTouchEnabled就OK了。

然後我就去看原始碼了,我想著引擎的處理應該更加正規吧,結果是:

 

you are welcome. 我知道了不用lambda表示式怎麼寫了。才怪!這不就是建立listener的方法嘛。

然後我們來看看主程大大在2.0 Lua版本是如何處理的:

 

建立一個MenuItem,在這個上面registerScriptTapHandler註冊了一個callback事件,然後觸發的時候,會傳遞tag和當前的物件過來,使用getParent就可以獲取到當前的Layer了。

其中pSender是由handler中的menu_item傳遞過來的。那這個tag是從哪裡來的?首先我查看了hanlder:

網上查了一下大概懂了其中的意思,method(obj, …)就是以obj作為物件去呼叫method方法。也就是說方法內部的self變成了傳入的obj。

直接改造一下,沒有任何問題:

往上檢視呼叫堆疊,看到了這個函式,基本推測是由m_state傳遞進引數的。

今天先到這裡,觸碰事件我是邊研究邊寫的,一天感覺搞不定,就花個幾天來分析一下這個東西。

剩下的問題是具體引數是如何傳遞的(實在找不到就算了)、registerScriptTapHandler的缺點,2.0更好的觸碰事件,2.0 C++中觸碰事件的處理

以後幾天會處理以上的問題。策劃改需求了得趕緊去做了。。。