大哥,我的android sdk目录下没有jetcocos creator sdkbox,要去哪能下载?

JetBoy游戏框架分析
游戏的界面,如下图所示:
先介绍游戏界面的组成:Asteroid(小行星,陨石)、Ship(飞船)、Beam(激光束),其他的都是背景。这个游戏如何玩了?通过中间按钮来控制飞船发射激光,击中陨石得分,飞船的位置与当前最新的陨石保证水平。如何切换游戏界面的横竖?这个相信每个开发人员应该知道吧(Ctrl + F11)!
首先,我们还是分析类的结构,如下图所示:
主要类如下:
Activity的子类,游戏事件
游戏界面的显示
核心线程类
KeyGameEvent
一个 key事件
JetGameEvent
一个JET engine 产生的事件
然后,我们分析程序对用户操作的处理:
最后,我们分析游戏运行的过程:
整个程序看起来比较的复杂,我也是在分析Android SDK的基础上,然后将代码整理后使用Rational Rose工具将代码的框架分析出来,通过分析工具,我们就可以屏蔽&复杂&的代码(代码细节),整个框架就可以清晰的显示在我们面前。
在学习之前,我们先简要解析几个概念,总结如下:
JET:一个在嵌入式设备上的音乐播放器(JET is an interactive music player for small embedded devices, including the those running the Android platform)
JET engine:一个控制游戏声音特效的引擎,其使用MIDI格式,并可以控制游戏的时间进度(一个精确的时钟是一个游戏必不可少)。
说到这里让我想起来,在学习DirectShow的时候,发现DirectShow也是通过声卡上的时间,来进行音/视频同步,毕竟硬件设备的时钟精确度比较高。JetPlayer则是Android SDK中提供的控制JET engine的类。
关于MIDI(Musical Instrument Digital Interface:乐器数码接口)我们简要说明下:
MIDI是用于在音乐合成器(music synthesizers)、乐器(musical instruments)和计算机之间交换音乐信息的一种标准协议;
MIDI不是声音信号,在MIDI电缆上传递的不是声音,而是发送给MIDI设备或其它装置让它产生声音或执行某个动作的指令;
MIDI主要有以下优点:生成的文件比较小,因为MIDI存储的是命令,而不是声音波形;容易编辑命令比编辑声音波形要容易的多;可以作为背景音乐,因为MIDI音乐可以和其他的媒体,比如数字电视、图形、动画等一起播放,这样可以加强演示效果;
每个物理MIDI通道(MIDI channel)分成16个逻辑通道,每个逻辑通道可以指定一种乐器,在MIDI信息中,用4个二进制位来表示这16个逻辑通道;
MIDI数据是一套音乐符号的定义,而不是实际的音乐,所以MIDI文件的内容被称为MIDI消息(MIDI message/MIDI event)。一个MIDI消息由1个8位的状态字节并通常跟着2个数字字节组成。在状态字节中,最高有效位设置为&1&,低4位用来表示这个MIDI消息是属于那个通道的,其余3位的设置表示这个MIDI消息是什么类型(通道消息-channel message,系统消息-system message)。
有了以上的基础知识,我们再来看Android SDK中的这篇文章中的一些说明就简单多了,部分摘要如下:
从上面的说明中我们可以发现,*.jet文件包含多个Segment,而每个SegMent又包含多个Track,一个Track是MIDI Event的序列。MIDI Event的结构在前面已经详细说明了,下面我们就开始进入本篇幅的主题。
首先,通过JetCreator authoring tool 来创建一个*.jet 文件
JetCreator authoring tool是使用Python编写的,在安装前需要安装Python and WXWidgets,安装好这更工具后,就可以使用这个工具来制作*.jet文件,这部分的详细说明,大家可以到Android SDK中Audio Video部分的文档去仔细阅读吧。有了*.jet文件,我们就可以通过JetPlayer来播放器中的声音效果,比如JetBoy游戏中的激光的声音。
然后,解析JetPlayer.OnJetEventListener 接口
结合我们前面的介绍,这几个接口函数是不是看起来就明白多了,唯一需要说的参数userID,这个参数是个标记,在程序中可以自己设置。
最后,解析JetPlayer 类
JetPlayer 是个单体类(a singleton class.),使用Static函数getJetPlayer(),就可以获取得到这个实例。JetPlayer类内部有个存放segment的队列,JetPlayer类的主要作用就是向队列中添加segment或者清空队列,其次就是控制segment的track是否处于打开状态。
至于如何使用是比较简单的,主要还是*.jet文件的制作上,以后有机会再为大家慢慢介绍如何制作*.jet文件,下一篇幅我们将介绍核心代码分析。
有个前面2篇(、)的介绍,相信大家都迫不及待的想知道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 =private TimerTask mTimerTask =
这2个就是来实现一个定时器,游戏界面上的时间就是通过这个定时器:定时向主线程发送消息来更新游戏剩余时间的。具体的实现是:通过Handler来绑定到当前线程,然后通过Handler向主线程发送消息,并在Handler中处理消息,这个在中已经说明了,这里就不在详细说明了。
最后,总结说明
这个实例比较复杂,尤其是JET部分,我也是查阅了不少的资料,然后再具体分析阅读,最终把我自己分析的与大家分享,其中有很多地方还不是很详细。这个游戏本身没有什么可玩性,其主要作用是:演示如何通过JET这个引擎来播放声音,以及如何利用JET的事件来作为游戏的时钟;但是通过这个实例,在以后发游戏开发中却为我们提供了一个很好的实例,在以后的游戏开发、应用程序开发中都很值得借鉴。
Copyright (C)2017
All rights reserved.下次自動登錄
現在的位置:
& 綜合 & 正文
Android JetPlayer
本文譯自:
Android平台包含了一個能夠把JET音頻內容的交互式播放添加到應用程序中JET引擎。使用攜帶SDK的JetCreator編輯應用程序來創建用於交互式播放的JET內容,使用JetPlayer類來管理應用程序中的JET內容。
播放JET內容
本節介紹如何編寫、建立和播放JET內容。
對於JET概念和如何使用JetCreator編輯工具指令的介紹,請看“”。這個工具在Windows,OS X和Linux平台上都是有效的(Linux不支持像Window和OS版本那樣的導入編輯)。
下例演示如何播放保存在SD卡上的.jet文件:
JetPlayer jetPlayer = JetPlayer.getJetPlayer();
jetPlayer.loadJetFile("/sdcard/level1.jet");
byte segmentId = 0;
// queue segment 5, repeat once, use General MIDI, transpose by -1 octave
jetPlayer.queueJetSegment(5, -1, 1, -1, 0, segmentId++);
// queue segment 2
jetPlayer.queueJetSegment(2, -1, 0, 0, 0, segmentId++);
jetPlayer.play();
SDK中包含了一個示例應用程序---JetBoy,它顯示了在遊戲中如何使用JetPlayer來創建一個交互式的音軌。它還演示了如何使用JET事件來同步音樂和遊戲邏輯。這個應用程序位於SDK Samples的JetBoy中。
【上篇】【下篇】android-sdk-linux 下没有sdk manager,怎么解决,有ilnux 的sdk manager 下载么_百度知道
android-sdk-linux 下没有sdk manager,怎么解决,有ilnux 的sdk manager 下载么
我有更好的答案
在你上面的tools文件夹中看看是不是有 名为android的shell脚本,有的话执行下面两步:1 切换到tools目录cd
xxxx/android-sdk-linux/tools
2 执行shell文件
sudo ./android然后 SDK Manger就会出来了
为您推荐:
其他类似问题
android的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。Android SDK manager里没有api安装包,只有tools和extras_百度知道
Android SDK manager里没有api安装包,只有tools和extras
题;这东西,已经试过勾选Force https:/&#47
我有更好的答案
SDK安装目录下默认会有 tools 和extras目录,如果没有说明你的SDK需要更新注意的是android sdk 没有分32位和64位 是通用的版本但是国内已经无法正常的更新和下载SDK了需要作几个设置:使用国内镜像 镜像地址在附件中端口80使用工具进行连接设置Eclipse的更新地址 将地址设置为 本机 8580重新打开SDK Manager 将需要更新或者下载的选项勾上并按 Install Packages即可。更新完SDK后,重新打开SDK安装目录即可查看了
是网速问题。将SDK关闭之后重新打开。如果不行,等过一段时间。你的网速好了之后明确的告诉你
我在网上下的sdk也是这样。。后来我是通过去官网下载android sdk解决了。。。不知道能不能帮到你
developer.android.com/sdk/index.html
选择download the sdk里面包含android 4.2.2 而且不用设置环境变量 解压就能用
我和你的问题一样,你解决了吗?真心感谢!
其他1条回答
为您推荐:
其他类似问题
您可能关注的内容
android的相关知识
换一换
回答问题,赢新手礼包
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。我的安卓SDK里面没有doc这个文件夹,所以就没有API帮助文档,谁能把SDK里面的doc这个文件夹打包发给我?_百度知道
我的安卓SDK里面没有doc这个文件夹,所以就没有API帮助文档,谁能把SDK里面的doc这个文件夹打包发给我?
我有更好的答案
//www我用115网盘分享到你的邮箱了,你进入邮箱接收一下,如果没有115网盘就注册一个。<a href="http.115
自己新建一个不就好了
为您推荐:
其他类似问题
您可能关注的内容
安卓的相关知识
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 android creator 的文章

 

随机推荐