笨木头  2012-05-18 12:24     LGame     阅读(9039)     评论(18)
转载请注明,原文地址: http://www.benmutou.com/archives/235
文章来源:笨木头与游戏开发

【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 条评论
  • walker02    2012-05-18 15:05:00

    哥们 做的不错
    回复
  • musicvs    2012-05-18 19:29:00

    [reply]walker02[/reply]
    谢谢支持,真心谢谢。
    回复
  • uuhan    2012-06-11 11:15:00

    我使用lgame,总是不能播放音乐 。这是为何???
    回复
  • musicvs    2012-06-11 12:23:00

    [reply]uuhan[/reply]
    我还没有研究到音乐播放,能上代码么?我调试看看?~
    回复
  • Ryan_zorro    2012-06-26 10:04:00

    确实不错,等待你归来
    回复
  • musicvs    2012-06-26 12:31:00

    [reply]Ryan_zorro[/reply]
    谢谢你...项目还没上线,希望顺利
    回复
  • lgp159753    2012-06-29 01:51:00

    谢谢楼主的分享
    期待学堂
    回复
  • musicvs    2012-06-29 08:59:00

    [reply]lgp159753[/reply]
    谢谢支持~
    回复
  • Mikiller3    2012-08-09 16:31:00

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

    [reply]Mikiller3[/reply]
    我刚刚测了一下,能够响应这些事件。。。你是不是哪里逻辑写错了?
    回复
发表评论
粤ICP备16043700号

本博客基于 BlazorAnt Design Blazor 开发