【LGame016.結束入門】進階儀式之onTouchEvent觸發流程
關鍵字:LGame 入門 控制項onTouchEvent
笨木頭花心貢獻,啥?花心?不呢,是用心~
轉載請註明,原文地址:http://blog.csdn.net/musicvs/article/details/7579718
各位,謝謝你們願意看我的文字,雖然LGame入門學堂的教程,每篇的閱讀量平均不到200次,但是,我已經很欣慰了,我只是一個剛畢業9個月的小屁孩。感謝每一位看我文字的朋友,是你們給了我堅持的力量。
再此,我想宣布一個不幸的訊息:LGame入門學堂要結束了。
這是最後一篇教程,LGame系列教程要暫停更新了。
原因只有一個:工作上遇到麻煩了,連生活費都沒有了。
我的項目組會最後拼幾周,老大說一周內發布第一個版本,不再修改了。
這是我最後一次相信老大,因為我的血汗代碼已經被毀容了3、4次了,我沒辦法再容忍了。木頭也要吃飯的。
如果我有幸度過這個難關,我將繼續更新LGame系列教程,到時候就不是入門學堂咯,是LGame進階修鍊,我將會以講解源碼為主(當然,我能力有限,不會很深入的)。
好了,謝謝聽我廢話。
這次我們來看看LGame的觸屏事件是如何傳遞到Screen的,也就是我們最終看到的遊戲畫面。
我研究了好幾個小時的源碼了,如果還是說錯,請一定要指正我。
大致的流程如所示:
LgameAdnroid2DView繼承了SurfaceView,做遊戲的開發的各位,應該很清楚,它是用來繪製遊戲畫面的。
LgameAndroid2Dactivity就不解釋了,大家都知道。
Lhandler是什麼呢?控制代碼,應該是windows編程用的最多的吧?(我可沒有多少windows編程的經驗),按照我的理解,它就是存放了一堆對象的引用,一般來說,這些對象都是全域唯一的,當然,Lhandler也是全域唯一的。也就是說,Lhandler可以讓我們很方便地擷取一些對象的引用,比如LgameAdnroid2Dview對象、LgameAndroid2Dactivity對象,都會儲存到Lhandler裡。
Screen,不用我解釋了吧?我們經常用的吖,就是我們最終表現出來一個又一個的遊戲畫面。
Lflicker,這我可不太懂,但是我知道它有一個很重要的功能:傳遞螢幕手勢事件。它有一個GestureDetector對象,GestureDetector主要是用來擷取手勢事件的,大家百度一下,比我解釋的好多了。
好喇~
onTouchEvent首先會到達LgameAdnroid2Dview,
然後在LgameAdnroid2Dview的onTouchEvent裡會調用LgameAndroid2Dactivity的onTouchEvent,
在activity裡的onTouchEvent又會調用Lhandler的onTouchEvent,
在Lhandler的onTouchEvent裡又會調用Screen和Lflicker的onTouchEvent。
好亂是不?~其實就是一層層調用函數而已,最主要的就是最後調用了Screen的onTouchEvent,這樣,我們就能靈活地使用觸屏事件了。
然後再來解釋一下Lflicker的onTouchEvent是怎麼回事吧,在這裡,又調用了GestureDetector的onTouchEvent,暈了,這麼多onTouchEvent很煩吧?沒事喇,其實就是一個蘋果傳來傳去而已,沒啥進階的事情。
之前說了,GestureDetector是監聽手勢事件,那跟它的onTouchEvent有什麼關係呢?有的,手勢事件也是通過觸屏事件來判斷的,所以,必須把觸屏事件傳給GestureDetector,GestureDetector再由此判斷手勢事件。
說了這麼多,沒有代碼就是亂,對不對?那,看代碼唄:
為什麼沒有人問我,是誰把onTouchEvent傳遞給LgameAdnroid2Dview的呢?好吧,其實我也很想知道,我嘗試去尋找,可惜我能力不足,希望有高人指點。
好喇,結束了。
LGame入門學堂結束了,希望有緣再見。
原文第一次發佈於Android-Fans論壇:
http://www.android-fans.net/forum.php?mod=viewthread&tid=1865#lastpost