基于Android的移动应用开发
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
获取SDK
新手上路的第一步便是获取Android SDK (软件开发工具包)。 SDK里有一个核心类库,一个模拟器, 一些工具和示例代码。 (其实可以下载一个集成包,安装或者 解压后即可)
学习应用程序架构
别急着一头扎进开发的海洋里,理解 Android应用程序架构是很重要的。如 果你不学一下,你设计出来的游戏在线 下将很难调试。 Google提供了很多有用的架构信息。真 正重要的是要理解为什么你的游戏需要 多于一个的Activity,以及怎样才能设计 一个有良好用户体验的游戏。 要理解这些,首先要了解什么是 Activity生命周期。
学习Activity生命周期
你的activity创建、恢复、暂停、销毁都 受Android操作系统的支配。 正确处理这些事件是很重要的,这样应 用程序才能表现良好,做用户认为正确 的事。 在设计游戏之前了解所有这些是如何工 作的是件好事,因为以后你可以为自己 节省调试时间和昂贵的重新设计时间。
声音效果
正常情况下当写游戏的时候,声音更新 会产生一些传往声音缓冲区的字节流, 但是Android能够管理自己的声音,因 而你的选择将是使用SoundPool或者 MediaPlayer。 它们都需要小心处理以免出错,但你要 知道,因为一些底层实现细节,小型、 低比特率的声音文件将带来最佳的性能 和稳定性。
主循环
游戏的主循环以一个特定的顺序在每秒 钟内“滴答”提醒子系统运行。 你的主循环需要在它自己的线程里运行, 原因是Android有一个主用户界面线程, 如果你不运行自己的线程,用户界面线 程将会被你的游戏所阻塞,这会导致 Android操作系统无法正常的更新任务。
游戏输入
输入是指用户按下的任何键、对于滚动条 的移动或者用户的触摸。 在处理物理之前处理这些是很重要的,因 为很多时候输入会影响到物理层,因而首 先处理输入将会使游戏的反应更加良好。 在Android里,输入事件从主用户界面线 程而来,因此你必须写代码将输入放入缓 冲区,这样你的主循环可以在需要的时刻 就从缓冲区里取到它。这并非难事。
Android Studio与Eclipse
据说现在使用Eclipse 做 Android开发的 程序员走在路上都不好意思和别人打招 呼。因为现在开发都在用Android Studio。
Android Studio的优点
1.比Eclipse漂亮 2.比Eclipse速度快(与电脑性能有关) 3.提示,补全更加智能。 4.整合了Gradle构建工具(电脑不好很卡) 5.支持Google Cloud Platform 6.强大的UI编辑器 7.更完善的插件系统 8.完美的整合版本控制软件(svn、git)
回调方法
public interface BeAttackCallBack { //确定受到攻击 void ensureBeAttack(float score); //确定被移除时 void ensureRemove(GameImg gameImg); //攻击到飞机 void attackedPlane(); //发射最后一颗子弹 void launchFinalBullet(GameImg gameImg); }
主循环
根据你写的游戏的类型,你可能需要也 可能不需要一个主循环。 如果你的游戏不依赖于时间或者它仅仅 对用户所做的加以回应,并且不做任何 视觉上的改变,永远等待着用户的输入, 那么你就不需要主循环。 如果你写的是动作类游戏或者带有动画、 定时器或任何自动操作的游戏,你应该 认真考虑下使用主循环。
基于Android的移动应用开发
Android是一个基于Java的环境。这对初学者来说是个好消息,因 为相对于C++,Java被广泛认为是一门更容易上手的语言,它是移 动开发的规范。
Android开发工具
Android开发之初,Eclipse作为Google推 荐的原生开发工具之一。 如果你熟悉Java并且用过Eclipse,要让 你的第一个应用跑起来那是相当简单。 如果你以前从没写过代码,在你前进路 上还要学习很多,但别放弃。
学习Activity生命周期
对大多数应用来说,默认的设置将工作 正常,但对于游戏,你可能需要考虑将 SingleInstance标志打开。 当设置为默认时,Android在它认为合 适时会创建activity的新实例。 对于游戏来说,你可能只需要一个游戏 activity的实例。这对于你要怎样管理事 务的状态有些影响,但对于我来说,这 解决了一些资源管理的问题,应予以考 虑。
为什么是回调接口?
敌机的能力虽然我们很清楚,但是我们 不清楚他到底什么时候会使用该能力, 比如,我们不可能一开始就知道敌机什 么时候被打死了,而他被打死后需要通 知绘画者,如何通知便成了麻烦事情,
总不能让绘画者使用轮询的方式不停的 问敌机,“你到底死了没呀?” 那这样的话岂不是必须让敌机被打中后 憋住一口气一直等绘画者来问完自己后 才能死掉,未免有点委屈敌机了。 所以此时使用回调接口,当敌机死亡或 者打中敌机时,调用回调方法即可。
游戏输入
首先为下一个用户输入定义一个域,然 后将onKeyPressed或onTouchEvent函数 设为接到一个用户动作就放到那个域里, 有这两步就够了。 如果对于给定游戏的状态,这是一个合 法的输入操作,那么所有输入需要在那 一刻做的更新操作都已经定下来了,剩 下来就让物理去关心怎样响应输入吧。
什么时候暂停和结束游戏?
同理,就不再解释了 public interface GameCallback { void gameOver(GameMsg obj); void gamePause(); void gameOut(); void gameContinue(); }
开始绘制
绘画更新要考虑游戏的状态、角色的位 置、分数、状态等等,并将一切画到屏 幕上。 如果使用主循环,你可能需要使用 SurfaceView,并做一个“推”绘制。 对于其他视图,视图本身能够调用绘制 操作,主循环不必处理。
选择绘制工具
SurfaceView每秒产生的帧数最多,最适 合于一些有动画或屏幕上有运动部件的 游戏。 绘画更新所要做的工作是获取游戏的状 态,并及时地为这个状态绘制图像。 其他的自动化操作最好由不同的更新任 务来处理。
他有自己的安全监测系统,负责自己的 生命安全,如果被打中了,那么就会发 生爆炸,最后消失在视野中。 差点忘了,他的使命可以来消灭我军飞 机的,他有能力与我军飞机碰撞同归于 尽。此时我军飞机会爆炸并消失。
而这些能力有一部分需要反馈给游戏者, 那么如何展示就要靠绘画者来完成了, 而为了能够较好的通知绘画者,需要抽 象出一个回调接口。
最后一条优点
也是最重要的优点: 9.Android Studio是Google推出的。
Android Stuido是Google推出,专门为Android“量身订做”的, 是Google的亲儿子。作为Android Developer大腿一定要抱紧。
Eclipse目录结构
Android Studio目录结构
Android开发工具
Android Studio是谷歌13年推出的一款 基于Intellij IDEA开发的Android IDE。 据说之前有很多bug,所以导致没有多 少人去使用,在最近几个版本的更新后 已经非常不错了,基本到了不用就out 的地步了。下面来对比一下 Android Studio和Eclipse。
其他所有部件均实现该接口 如:public class PlaneImg implements GameImg{ public Rect getRect() {} public Bitmap getBitmap(boolean move){} public int getX(){} public int getY(){} }
动画效果
动画并非像在游戏里放入会动的gif图片 那样简单。你需要使得游戏能在恰当的 时间画出每一帧。但又并没有听起来那 么困难。 保留一些像isDancing、danceFrame和 lastDanceFrameTime那样的状态域,那 样动画更新便能决定是否可以切换到下 一帧去了。 动画更新真正做的事就那么多。真正来 显示动画的变化是由绘画更新来处理的。
仿微信飞机大战游戏开发
面向对象开发
应该考虑面向对象开发 面相对象开发的好处瞬间就能爆发出来, 此时将飞机大战中的所有部件抽象成对 象,如:背景,自己的飞机,自己发射 的子弹,敌人的飞机(大、中、小), 敌人的子弹。
面向对象开发
由于所有的部件都有类似的本领和功能, 所以此处可以再次抽象出一个接口 public interface GameImg { Rect getRect(); Bitmap getBitmap(boolean move); int getX(); int getY(); }
效率优先
性能是任何游戏的主要问题。我们的目 标是使得游戏的反应越快越好,看起来 越流畅越好。 某些方法如Canvas.drawLine比较慢。并 且要将屏幕大小的位图画到主画布上, 每一帧都是代价昂贵的。如何权衡对于 达到最佳性能很有必要。
效率优先
确保管理好你的资源,使用技巧来以最 少量的CPU资源完成你的任务。如果性 能不好的话,即使是最好的游戏玩起来 也没劲。人们一般对于游戏卡或者响应 慢几乎难以容忍 在游戏中始终一致的位图配置(如 RGBA8888)。这将会通过减少不同格 式之间转换的时间来节省图形库的CPU 时间。
效率优先
声音文件要小而且低比特率。需要加载 的越少,加载速度越快,游戏所需内存 越少。 声音使用OGG文件,图片使用PNG文件。 确保释放所有媒体播放器,当Activity销 毁时空出所有的资源。这能保证垃圾收 集器清除了所有东西,也能保证在两次 游戏开始之间没有内存泄露。
测试
最重要的是,花时间测试再测试,确保 每一小部分都如你所愿地工作。 改善游戏是整个开发中最耗时最困难的 部分。 如果你匆匆将其推向市场,你很可能会 使用户们失望,你会感到你的努力都白 费了。 你不可能使所有人都喜欢你写的东西, 但你至少要尽量发布你最高质量的作品。
以敌人的飞机为例子: 为了更好的体现高内聚、低内聚, 所有类都有自己的任务,并且都放在不 同的java文件中。 开始游戏时,我设置了一个定时+随 机策略来派遣敌机,然后他的生死我就 不管了,他愿意怎么混就怎么混。我将 敌机看做是一个活生生的人,他有自己 的思维(只是比较笨)。
敌机一出生后,他会知道自己的大小, 可能是大飞机、中飞机、小飞机。 他会知道自己的价值,10分、30分、60 分。 他会知道自己在被打中身亡的时候是否 有能力背水一战,即:发送最后一个子 弹。 当然,他会立即发射一颗子弹,而子弹 的速度是随机的,同时方向可能是左, 前,来自百度文库三个方向。