有个前面2篇(框架分析、JetPlayer类解析)的介绍,相信大家都迫不及待的想知道JetBoyThread这个核心类到底是如何运行的,下面我们就逐步为大家解析。
首先,分析这个类的状态图,如下所示
这张图就是我们整个程序的循环周期:PLAY——RUNNING——LOSE。根据这张图,我们逐步细化,这里我们重点介绍RUNNING,其他2种状态比较简单,这里就不再说明了。
然后,START_RUNNING 状态逐步细化,详细说明
START_RUNNING状态下的流程图,实际上就分为2部分:事件处理(updateGameState)、画图(doDraw),如下图所示:
将上面的2个活动图,逐步细化如下
- doDraw细化后的活动图,如下图所示:
解析说明:根据状态画当前的游戏实时的图像。
- updateGameState细化后的活动图,如下图所示:
解析说明:这是一个循环从消息队列中获取消息的过程,直到消息队列为空。
看到上面的TIMER_EVENT大家是不是绝对奇怪,在Android SDK文档中有明确说明,如下:
Trigger Events :Breaking a MIDI file into individual (non-linear) segments and queueing up those segments for playback in a game based on events within the game is one way JET music files are interactive. Trigger events are an additional method for interactive playback.
也就是说我们可以在segment中定义一些事件,到了特定的时间来触发。在前面已经说过,JET除了播放声音特效意外,应该还有个更加重要的重要:游戏的时钟。我们就可以在segment中定义一些特定的事件,这些时间就相当于是CPU中的时间片。当然MIDI规范中已经定义了很多事件,我们可以自定义事件的ID范围:80-83。查看程序中的代码,如下:
private final byte NEW_ASTEROID_EVENT = 80;
private final byte TIMER_EVENT = 82;
这2个事件分别用来触发产生新的asteroid、界面更新。
至此,整个核心代码的流程,我们都已经分析完了。这个游戏相对来说比较简单,就是通过按下中间键来发射子弹,飞船的位置与当前出现的陨石在一条水平线上,通过计算飞船与陨石的距离来检测是是否集中陨石。
其次,补充说明遗漏的地方
在这里需要补充说的是,在程序中使用了
private Timer mTimer = null;
private TimerTask mTimerTask = null;
这2个就是来实现一个定时器,游戏界面上的时间就是通过这个定时器:定时向主线程发送消息来更新游戏剩余时间的。具体的实现是:通过Handler来绑定到当前线程,然后通过Handler向主线程发送消息,并在Handler中处理消息,这个在Snake游戏中已经说明了,这里就不在详细说明了。
最后,总结说明
这个实例比较复杂,尤其是JET部分,我也是查阅了不少的资料,然后再具体分析阅读,最终把我自己分析的与大家分享,其中有很多地方还不是很详细。这个游戏本身没有什么可玩性,其主要作用是:演示如何通过JET这个引擎来播放声音,以及如何利用JET的事件来作为游戏的时钟;但是通过这个实例,在以后发游戏开发中却为我们提供了一个很好的实例,在以后的游戏开发、应用程序开发中都很值得借鉴。
分享到:
相关推荐
安卓Android源码——JetBoy飞机游戏源码.zip
eclipse 编译 模拟器运行通过。 android SDK1.6 eclipse 飞机游戏 源码
• Snake游戏深入解析 • Android学习每日一例——ApiDemos • JetBoy游戏深入解析(上)(中)(下) • 构建Android平台Google Map应用 • Android 中的XMPP 应用
Android应用源码之JetBoy飞机游戏源码_源码
Android应用源码之JetBoy飞机游戏源码.zip项目安卓应用源码下载Android应用源码之JetBoy飞机游戏源码.zip项目安卓应用源码下载 1.适合学生毕业设计研究参考 2.适合个人学习研究参考 3.适合公司开发项目技术参考
android 源码学习. 资料部分来源于合法的互联网渠道收集和整理,供大家学习参考与交流。本人不对所涉及的版权问题或内容负法律责任。如有侵权,请通知本人删除。感谢CSDN官方提供大家交流的平台
免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,...
免责声明:资料部分来源于合法的互联网渠道收集和整理,部分自己学习积累成果,供大家学习参考与交流。收取的费用仅用于收集和整理资料耗费时间的酬劳。 本人尊重原创作者或出版方,资料版权归原作者或出版方所有,...
源码参考,欢迎下载
安卓开发-JetBoy.zip
Android应用源码开发Demo,主要用于毕业设计学习。
源码参考,欢迎下载
《Android移动开发案例详解》作为《Android平台手机软件...实用软件(如音乐播放器、天气预报、多媒体播放器、短信语音播报、手机远程监控器等),游戏软件(如JetBoy、连连看、贪吃蛇等)以及其他程序的详细开发过程。
在学习jetboy代码时,发现屏幕被旋转了,代查代码没有找到相关设置,在manifest.xml中找到了相关的代码: 找到这名代码: 代码如下:android:screenOrientation=”portrait” portrait表示横向,landscape表示纵向 ...
JetBoy A game that demonstrates the SONiVOX JET interactive music technology, with JetPlayer. Live Wallpaper An application that demonstrates how to create a live wallpaper and bundle it in an ...