【LGame016.结束入门】进阶仪式之onTouchEvent触发流程
各位,谢谢你们愿意看我的文字,虽然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