我准备给我哥玩几个单机游戏,给个建议。

如果你有兴趣为Android平台开发游戏,有很多事情你需要知道。如果有游戏开发经验,迁移到移动平台也不会特别难。你只需要学习它的架构和API。如果你是游戏开发新手,我为你总结了一个入门需要知道的事项列表。这些知识适用于许多类型的游戏,包括动作、策略、模拟和解谜。Android是一个基于Java的环境。这对初学者来说是个好消息,因为与C++相比,Java被广泛认为是更容易使用的语言,它是移动开发的规范。Google在记录API和提供示例代码方面也做得非常出色。一个叫做API Demos的例子展示了API几乎所有的功能。如果您熟悉Java并使用过Eclipse,那么运行您的第一个应用程序是相当容易的。如果你以前从未写过代码,你还有很多东西要学,但是不要气馁。

获取SDK

新手上路的第一步是拿到Android SDK(软件开发包)。SDK中有一个核心类库,一个仿真器,一些工具和样例代码。我强烈推荐使用Eclipse和Android Eclipse插件。如果你玩Android,Eclipse IDE对Java开发者来说非常有用。如果这是您第一次开发Java项目,您可能需要下载完整的JDK,其中包括一些用于签名和部署应用程序的工具。

学习应用程序架构

不要贸然进入开发的海洋,了解Android应用的架构非常重要。不学的话,你设计的游戏很难离线调试。你需要了解应用程序、活动、意图以及它们之间的相互关系。Google提供了很多有用的架构信息。真正重要的是理解为什么你的游戏需要不止一个活动,以及设计一个用户体验良好的游戏意味着什么。要理解这一点,首先要明白什么是活动生命周期。

学习活动生命周期

活动生命周期由Android操作系统管理。您的活动的创建、恢复、暂停和销毁都由操作系统控制。正确处理这些事件非常重要,这样应用程序才能表现良好,做用户认为正确的事情。在你设计你的游戏之前知道这一切是如何工作的是很好的,因为你可以节省你自己的调试时间和将来昂贵的重新设计时间。对于大多数应用程序,默认设置将正常工作,但对于游戏,您可能需要考虑打开SingleInstance标志。当设置为默认值时,Android将创建一个它认为合适的新活动实例。对于游戏,您可能只需要一个游戏活动实例。这对你如何管理事态有一些影响,但对我来说,它解决了一些资源管理的问题,应该加以考虑。

大循环

根据你写的游戏类型,你可能需要也可能不需要一个主循环。如果你的游戏不依赖于时间或者只是响应用户做了什么,永远等待用户的输入而不做任何视觉上的改变,那么你就不需要主循环。如果你写一个动作游戏或者一个有动画、定时器或者任何自动操作的游戏,你应该认真考虑使用主循环。

游戏的主循环每秒“滴答”一声,提醒子系统按照特定的顺序运行。你的主循环需要在自己的线程中运行,因为Android有一个主用户界面线程。如果不运行自己的线程,用户界面线程会被你的游戏阻塞,导致安卓操作系统的正常更新任务。执行的顺序通常如下:状态、输入、人工智能、物理、动画、声音、视频。

更新状态意味着管理状态转换,如游戏结束、选择角色或下一关。很多时候你需要在某个状态下等待几秒钟,状态管理要处理这个延迟,时间过了之后再设置到下一个状态。

输入是指用户按下的任何键、滚动条的移动或用户的触摸。在处理物理之前先处理这些是很重要的,因为很多时候输入会影响物理层,所以先处理输入会让游戏反应更好。在Android中,输入事件来自主用户界面线程,因此您必须编写代码将输入放入缓冲区,以便您的主循环可以在需要时从缓冲区中获取它。这个不难。首先,为下一个用户输入定义一个域,然后设置onKeyPressed或onTouchEvent函数,在接收到用户操作后将它放入该域。这两步就够了。如果这是一个给定游戏状态的合法输入操作,那么那一刻需要做的所有更新操作都已经决定了,剩下的就是物理要关心如何响应输入了。

人工智能所做的类似于用户决定下一步“按”哪个按钮。学习如何编写一个人工智能程序不在本文讨论范围之内,但大意是人工智能会根据用户的意图按下按钮。这些也需要物理的处理和响应。

物理可能是也可能不是真正的物理。对于动作游戏来说,重点是要考虑上一次更新的时间,当前正在更新的时间,用户的输入和人工智能,决定它们向哪个方向发展,是否会有冲突。对于一个视觉上抓取一些部件并滑动的游戏来说,物理是游戏中滑动部件或将部件放在正确位置的部分。对于一个小游戏来说,物理甚至是游戏中决定答案对错的部分。你可能会给它起别的名字,但每个游戏都有一个红肉部分作为游戏引擎。在本文中,我称这部分为物理。

动画不是在游戏里放动画gif图片那么简单。你需要让游戏在正确的时间画出每一帧。这并没有听起来那么难。保留一些像isDancing、danceFrame、lastDanceFrameTime这样的状态字段,以便动画更新可以决定是否切换到下一帧。动画更新真正做的事情太多了。动画的真实变化是通过视频更新来处理的。

声音更新要处理触发音,停止音,音量变化,音调变化。一般情况下,写游戏的时候,声音更新会生成一些字节流到声音缓冲区,但是安卓可以自己管理声音,所以你的选择会是使用SoundPool或者MediaPlayer。它们都需要小心处理以避免错误,但您应该知道,由于一些底层实现细节,小的低比特率声音文件将带来最佳的性能和稳定性。

视频更新要考虑比赛状态,人物位置,比分,状态等等,把一切都画在屏幕上。如果您使用主循环,您可能需要使用SurfaceView并进行“推送”绘制。对于其他视图,视图本身可以调用绘制操作,主循环不必处理。SurfaceView每秒生成的帧数最多,最适合一些屏幕上有动画或运动部件的游戏。视频更新的工作就是获取游戏的状态,并及时为这种状态绘制图像。其他自动化操作最好由不同的更新任务来处理。

代码是什么样子的?这里有一个例子。

1:公共void run() {

2: while(正在运行){

3:while(isPaused & amp;& amp正在运行){

4:睡眠(100);

5: }

6:update();

7: }

8: }

9:

10:私有void更新(){

11:updateState();

12:update input();

13:update ai();

14:update physics();

15:update animations();

16:updateSound();

17:update video();

18: }

3D还是2D?

在你开始写游戏之前,你必须决定是做3D还是2D。2D游戏的学习曲线要低得多,因此通常更容易获得好的性能。3D游戏需要更深层次的数学技巧,一不小心就会出现性能问题。如果您计划绘制比方框和圆形更复杂的图形,则需要使用3D Studio和Maya等建模工具。Android支持OpenGL进行3D编程,OpenGL里面有很多不错的教程。

建立简单且高质量的方法

当你开始的时候,确保你不只是在整个游戏中使用一个庞大而冗长的方法。如果你遵循我上面描述的主循环模式,这将非常简单。你写的每一个方法都应该完成一个非常具体的任务,而且应该没有错误。例如,如果你需要洗一副牌,你应该写一个“shuffleCards”方法,该方法应该只做这一件事。

这是一种适合任何软件开发的编码实践,但对于游戏开发尤为重要。在有状态的实时系统中,调试将变得非常困难。让你的方法尽可能的小。一般的经验法则是每种方法都有且只有一个目的。如果你想以编程方式为场景绘制背景,你可能需要一个名为“drawBackground”的方法。像这样的任务可以很快完成,所以你可以通过积木来开发你的游戏,你可以继续添加你想要的功能,而不会让它变得难以理解。

最重要的是效率!

性能是任何游戏的主要问题。我们的目标是让游戏反应尽可能快,看起来尽可能流畅。有些方法如Canvas.drawLine很慢。并且在主画布上绘制屏幕大小的比特是很昂贵的。如何平衡是实现最佳性能所必需的。一定要管理好自己的资源,用技能用最少的CPU资源完成任务。再好的游戏,如果性能不好,玩起来也很无聊。一般来说,人们很难容忍游戏卡或者反应慢。

提示和技巧

看看SDK中的例子LunarLander。它使用的是SurfaceView,适用于一款每秒需要处理最多帧数的游戏。如果要做3D,例子里有GLView可以处理很多3D显示的初始化任务。对于LightRacer,我不得不优化绘制一切的方法,否则帧率会大大降低。我只在视图初始化时将背景绘制成位图一次。路径放在它们自己的位图中,并随着驱动程序的推进而更新。这两个位图在每一帧都被绘制到主画布上,驱动程序绘制在最上面,最后会有一个爆炸。这项技术使游戏运行在一个可玩的水平。

如果可以的话,让你的位图大小正好等于你要在屏幕上画的大小也是一个好的习惯。这样做了之后,就需要伸缩,这样可以节省CPU资源。

游戏中一致的位图配置(如RGBA8888)。这将通过减少不同格式之间的转换时间来节省图形库的CPU时间。

如果你决定开发3D游戏,但是对3D一无所知,你需要选择一到两本关于3D游戏编程的书籍,学习线性代数。你至少要懂点积,叉积,向量,单位向量,正规,矩阵,变换。这方面我见过最好的书叫《3D游戏编程与计算机图形数学》。

声音文件应该小且比特率低。需要加载的越少,加载速度越快,游戏需要的内存就越少。

使用OGG文件的声音和PNG文件的图片。

当活动被破坏时,确保释放所有媒体播放器并释放所有资源。这确保了垃圾收集器清除所有内容,并且游戏之间没有内存泄漏。

加入Android Google团队,寻求社区支持。这里有人可以在开发过程中帮助你。

最重要的是,花时间进行测试和再测试,以确保每个小部件都如您所愿地工作。改进游戏是整个开发过程中最耗时最困难的部分。如果贸然上市,很可能会让用户失望,你会觉得自己所有的努力都白费了。你不能让每个人都喜欢你写的东西,但你至少应该努力出版你的最高质量的作品。

Google在这里有很好的文档可以帮助你开始。

还有很多关于电驴的好书和视频教程~希望对你有帮助。