首页 > 窍门 > 科技数码

初学开发Android游戏要注意些什么

来源: 更新时间:2022-04-17 13:11:50
The Beginning

  随着智能手机的发展,许多游戏也不断的在手机中出现、更新,比如先前比较火的植物大战僵尸,愤怒的小鸟等等。游戏的本质就是在屏幕上不断地显示和更新图片,只不过不是胡乱地更新,而是根据程序逻辑来控制。一款完整的游戏需要多方面的知识,比如游戏的创意、背景、故事情节、游戏音效,游戏风格、游戏类型、运行速度、适配机型等。而且,游戏的开发需要策划、美工、程序、测试的协同工作和默契配合完成的。

  如果你对开发Android平台游戏感兴趣,那么你需要了解很多东西。如果你有些许开发经验,想要以开发跨平台游戏或表现出色的Android小游戏。那么你就要学习学习下面任务易提供的一些知识了。


  学习应用程序架构


  理解Android应用程序架构也是件非常重要的事情。如果你不学习这个方面的内容,可能会使游戏完成后问题的修改变得很困难。你需要理解应用程序、活动、意图以及它们之间的相互联系。Google在架构方面已经提供了许多有价值的信息。真正重要的是,要理解游戏为什么需要包含不止一个活动以及这对设计良好用户体验的意义。我们接下来要探讨的就是活动生命周期。


  获得SDK


  开发Android平台的首个步骤是获得Android SDK(游戏邦注:即软件开发工具包)。SDK包含核心库、模拟器、工具和代码范例。我强烈推荐使用Eclipse和Android Eclipse插件。如果你只面向Android平台,那么专门供Java Developers使用的Eclipse IDE是个很好的工具。如果这是你的首个Java开发项目,你可以下载整个Java SE Development Kit(游戏邦注:简称“JDK”),因为它包含你需要用于应用认证和部署的工具。


  学习活动生命周期


  活动生命周期由Android操作系统管理。你的活动将根据操作系统的指令创建、回访、暂停和摧毁。正确处理这些事件对构建有着良好行为的应用程序非常重要,这样应用才能正确地满足用户的意图。在你开始设计游戏之前,有必要先知道所有这些内容的运转方式,这会减少你将来调试和重新设计的时间。对于多数应用程序来说,使用默认设置就可以了。但是对游戏来说,你可能需要考虑打开SingleInstance功能。当处在默认设置下时,Android会在合适的时候自动创建新活动实例。对于游戏来说,你可能只想要单个游戏活动实例。这也等于提示你需要如何来管理内容状态,但是对我来说,它解决了某些资源管理问题,所以应当考虑入列。


  主循环


  是否拥有主循环取决于你编写的游戏类型。如果你的游戏与时间无关,或者如果游戏只会对用户的行为做出反应,没有用户输入视觉场景就不会发生改变,那么你或许不需要主循环。如果你编写的是动作游戏或带有动画、计时器或其他自动运转内容的游戏,那么你应当认真考虑使用主循环。


  游戏的主循环指以特定顺序运转子系统,通常会尽可能提升每秒主循环的次数。你的主循环需要在它自己的线程上运行。原因在于,Android有个主UI线程,如果主循环不在自己的线程上运行,那么UI线程就会受游戏影响,导致Android OS无法完成普通的更新任务。执行顺序通常是:状态、输入、AI、物理、动画、音效和视频。


  更新状态意味着管理状态改变,比如游戏结束、角色选择或下个关卡。通常情况下,你需要在一个状态上等待数秒钟时间,状态管理的任务应当是处理这个延迟并设置时间过后的下个状态。


  输入是指来自用户的任意按键、滚动或触碰。在处理物理前完成这个方面的内容是很重要的,因为输入往往会影响到物理效果,所以先处理输入会让游戏显得更为灵敏。在Android应用中,输入事件来自于主UI线程,所以你必须通过代码来缓冲输入,这样你的主循环才能适时将其捕获。这并不是个很困难的任务。所有需要做的就是为下次用户输入确定区域,用onKeyPressed或onTouchEvent将下次用户动作设置到该区域中。在特定游戏状态下,所有的有效输入都需要进行输入更新,让物理端处理针对该输入的响应问题。


  AI更新类似于用户决定接下来要“按”的按键。学习如何编写AI不是这篇文章的主题,但基本想法是,AI将像用户那样按动按键。这也将被物理更新捕捉并做出响应。


  物理更新可能是真正的物理,也可能不是。对于动作游戏而言,要点在于同时考虑上次更新时间、此次更新时间、用户输入和AI输入,决定游戏中所有内容的位置以及是否有碰撞发生。对于你可以看到对象抓取和滑动的游戏,物理更新还需要处理对象的互动或者让它下落到指定的位置。对于问答游戏,它还需要决定答案是否正确。或许你使用的是其他的名称,但是每款游戏的游戏引擎中都需要有处理上述内容的部分,在这篇文章中我将其称为“物理”。


  动画并不只是在游戏中加入gif这么简单。你需要让游戏在恰当的时候播放每帧动画。但是,它也不像听起来那么难。要保持isDancing、danceFrame和lastDanceFrameTime等状态区域允许动画更新以决定是否转向下一帧。这就是动画更新所做的所有工作。真正负责呈现动画改变的是视频更新。


  音效更新负责触发音效、暂停音效、改变音量和音调。通常在编写游戏时,音效更新会生成一连串字节传输给音效缓冲器,但是Android自行管理音效,所以针对游戏开发,你可以使用SoundPool或MediaPlayer。它们都有一点敏感,但是要知道,由于存在某些低层次的执行细节,小而低位速率的OGG也能产生最棒的运行表现和稳定性。


  视频更新要考虑游戏状态、玩家位置、分数和状况等内容,在屏幕绘制所有内容。如果使用主循环,那么你可以考虑使用SurfaceView,进行“推送”绘制。如果使用其他视图,视图本身能够调用绘制运转,这样主循环就无需负责这项工作。SurfaceView能够提供最高的每秒帧数,最适合带有动画或在屏幕上有移动物体的游戏。视频更新应该做的工作是,获取游戏状态,并及时绘制在屏幕上。除此之外,其他的自动化内容最好由其他更新任务来完成。


  3D还是2D?


  在你开始开发游戏前,你需要决定是制作3D还是2D游戏。2D游戏要学习的内容较少,通常更容易获得良好的表现。3D游戏需要更多的深层次数学技能,如果不注意的话,可能会产生表现问题。如果你想要添加比方形和圆圈更加复杂的形状,那么无论选择3D或2D,都需要使用3D Studio和Maya等模型工具。Android支持使用OpenGL进行3D编程,网络上有许多很不错的OpenGL教程可供阅读。


  构建简单且高质量方法


  开发开始时,确保不要编写又大又长的方法。如果你采用我在上文中描述的主循环样式,这样得出的方法应当较为简单。你编写的每个方法都应当能够完成某项特定任务,而且不可发生错误。比如,如果你需要在游戏中洗牌,那么就应当编写名为“shuffleCards”的方法,而且这个方法就是用来完成洗牌这个动作。


  这是个可用于所有软件开发的编程方法,但是在游戏开发中显得特别重要。在状态化的即时系统中,调试会变得非常困难。要保持方法简单轻巧,最好是保证每个方法只有1个目标。如果你需要为场景绘制背景,那么你可能需要名为“drawBackground”的方法。这样会让你的游戏开发变得像搭建方块一般,你可以随时根据自己的需要添加新方块,同时不会让代码变得难以理解。


  学习应用程序架构


  理解Android应用程序架构也是件非常重要的事情。如果你不学习这个方面的内容,可能会使游戏完成后问题的修改变得很困难。你需要理解应用程序、活动、意图以及它们之间的相互联系。Google在架构方面已经提供了许多有价值的信息。真正重要的是,要理解游戏为什么需要包含不止一个活动以及这对设计良好用户体验的意义。我们接下来要探讨的就是活动生命周期。


  效能是关键


  运行效果是所有游戏遇到的主要问题。我们的目标是让游戏的反应速度尽可能快,游戏的运行看起来尽可能流畅。Canvas.drawLine等某些方法可能执行较慢。而且,在每帧的主画布上绘制全屏位图也会耗费大量时间。要让应用实现最好的表现,平衡这些动作就成了必要之举。确保对资源进行良好的管理,使用各种技巧,实现用最少的CPU完成任务。如果表现不好,即便是最棒的游戏也显得乏味无趣。通常情况下,人们不会对反应缓慢的应用抱有好感。


  总的来说,发布更新和错误修复是开发者们的另一块重要的工作,特别是独立的开发者。有些android小游戏开发一旦完成就鲜有更新,除非有重大的错误修复。而其它游戏,特别是那些比较重量级以及社交成分较多的游戏,则会在更新上花费较多精力,这时独立开发者们也发现用户们的反馈是很宝贵的资源。


THE END

TAG:些什么  要注意  百科  标签  

猜你喜欢

相关文章