【LGame入门学堂016.结束入门】进阶仪式之onTouchEvent触发流程

笨木头  2012-05-18 12:24   LGame   阅读(4,295)   18条评论

【LGame016.结束入门】进阶仪式之onTouchEvent触发流程

关键字:LGame 入门 控件onTouchEvent
笨木头花心贡献,啥?花心?不呢,是用心~

转载请注明,原文地址:http://blog.csdn.net/musicvs/article/details/7579718

位,谢谢你们愿意看我的文字,虽然LGame入门学堂的教程,每篇的阅读量平均不到200次,但是,我已经很欣慰了,我只是一个刚毕业9个月的小屁孩。感谢每一位看我文字的朋友,是你们给了我坚持的力量。

再此,我想宣布一个不幸的消息:LGame入门学堂要结束了。

这是最后一篇教程,LGame系列教程要暂停更新了。

原因只有一个:工作上遇到麻烦了,连生活费都没有了。

的项目组会最后拼几周,老大说一周内发布第一个版本,不再修改了。

这是我最后一次相信老大,因为我的血汗代码已经被毁容了34次了,我没办法再容忍了。木头也要吃饭的。

果我有幸度过这个难关,我将继续更新LGame系列教程,到时候就不是入门学堂咯,是LGame进阶修炼,我将会以讲解源码为主(当然,我能力有限,不会很深入的)。

好了,谢谢听我废话。

这次我们来看看LGame的触屏事件是如何传递到Screen的,也就是我们最终看到的游戏画面。

我研究了好几个小时的源码了,如果还是说错,请一定要指正我。

大致的流程如下图所示:

2.png

LgameAdnroid2DView继承了SurfaceView,做游戏的开发的各位,应该很清楚,它是用来绘制游戏画面的。

LgameAndroid2Dactivity就不解释了,大家都知道。

Lhandler是什么呢?句柄,应该是windows编程用的最多的吧?(我可没有多少windows编程的经验),按照我的理解,它就是存放了一堆对象的引用,一般来说,这些对象都是全局唯一的,当然,Lhandler也是全局唯一的。也就是说,Lhandler可以让我们很方便地获取一些对象的引用,比如LgameAdnroid2Dview对象、LgameAndroid2Dactivity对象,都会保存到Lhandler里。

Screen,不用我解释了吧?我们经常用的吖,就是我们最终表现出来一个又一个的游戏画面。

Lflicker,这我可不太懂,但是我知道它有一个很重要的功能:传递屏幕手势事件。它有一个GestureDetector对象,GestureDetector主要是用来获取手势事件的,大家百度一下,比我解释的好多了。

好喇~

onTouchEvent首先会到达LgameAdnroid2Dview

然后在LgameAdnroid2DviewonTouchEvent里会调用LgameAndroid2DactivityonTouchEvent

activity里的onTouchEvent又会调用LhandleronTouchEvent

LhandleronTouchEvent里又会调用ScreenLflickeronTouchEvent

乱是不?~其实就是一层层调用函数而已,最主要的就是最后调用了ScreenonTouchEvent,这样,我们就能灵活地使用触屏事件了。

后再来解释一下LflickeronTouchEvent是怎么回事吧,在这里,又调用了GestureDetectoronTouchEvent,晕了,这么多onTouchEvent很烦吧?没事喇,其实就是一个苹果传来传去而已,没啥高级的事情。

前说了,GestureDetector是监听手势事件,那跟它的onTouchEvent有什么关系呢?有的,手势事件也是通过触屏事件来判断的,所以,必须把触屏事件传给GestureDetectorGestureDetector再由此判断手势事件。

说了这么多,没有代码就是乱,对不对?那,看代码呗:

view.png
activiy.png
handler.png
screen.png
flicker.png
detector.png

什么没有人问我,是谁把onTouchEvent传递给LgameAdnroid2Dview的呢?好吧,其实我也很想知道,我尝试去寻找,可惜我能力不足,希望有高人指点。

好喇,结束了。

LGame入门学堂结束了,希望有缘再见。

 

 

原文第一次发布于Android-Fans论坛:

http://www.android-fans.net/forum.php?mod=viewthread&tid=1865#lastpost

 

 

18 评论

  1. [reply]musicvs[/reply]
    学长,还有个问题,我昨天看完了你的教程,然后有个Sprite的精灵,我把动画加到Sprites里面,设置Sprites的位置,为什么x和y的坐标都要负数?

  2. [reply]Mikiller3[/reply]
    源码。。。就是那个最简单的helloworld就可以了。。。
    “activity调用view,view调用screen”?不是直接activity里添加screen么?(setScreen方法)

  3. [reply]musicvs[/reply]应该不存在逻辑问题吧,我就是最基本的activity调用view,view调用screen,然后其他代码都没有,就重写了screen里的ontouchmove,不过我用的版本是0.3.2,然后现在在screen里添加lbutton ,doclick事件也响应不了。。。

  4. 最近在用lgame写游戏,正好碰到事件问题,写在screen里的ontouchumove之类的事件得不到响应,跟了代码发现ontouchevent传到handler里后,就断了,在setscreen是handler里一个isinstance变量被制成了true,但是当响应ontouchevent时这个变量又变成了false。。所以永远也传不到screen里面。。不知道为什么呀。。求帮忙

发表评论

电子邮件地址不会被公开。 必填项已用*标注