基于Android的移动应用开发

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

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

1 / 37
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功