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++中觸碰事件的處理
以後幾天會處理以上的問題。策劃改需求了得趕緊去做了。。。