我是如何从0开始,在23天里完成一款Android游戏开发的 – Part 1~3

jopen 11年前

        英文原文:Day 23: Release!

        【Part 1 – 开篇与前 2 天】

        开篇

        我想开发一款 Android 游戏有一段时间了,但从来没有一个好的 idea。最近,我一直在玩地铁跑酷,发现它实在太有意思了。通常来讲,我不喜欢没有终点的游戏,因为你不可能通关,所以每次我玩这些游戏的时候,我总会 随意设置一些目标然后再去玩。这次我的目标是得到 30 倍分数复乘技能。当我实现这个目标的时候,我就获得一些技能然后就会迷上这款游戏。这款游戏也让我意识到,一款 Android 游戏没有必要非要有什么大的来头和复杂的游戏设置,简单随意就好。

        不管怎样,我觉得一个游戏如果能做到仅需你将手指对准一个东西然后向它射击就很好了。如果再能有一个系统性的任务,每天每周需完成的挑战和一些 武器升级的话,那么这个游戏就会很有趣了。我的第一个想法是创立一款游戏,让一些可爱的小怪兽在一个美丽的场景中到处跑,可以藏在树后面,或者躲在老房子 里,甚至可以是在云朵里。你需要做的就是尽可能多地将它们打下。我说的可爱的小怪兽,指的是一些像 Gremlins(小精灵)之类的玩意。它们会搬一些体形巨大的机器,或者是做一些其他的愚蠢的事情来让你哈哈大笑。当然,作为一个拥有零预算的独立游戏 开发者,就按我可以想象到的动画复杂程度来看,我知道这些将需要投入大量的艺术设计和开发时间。所以我决定采用一种不同的设计,这样我可以在合理的时间内 自己完成。

        我现在的目标是在一个月内开发一款有趣而可玩的 Android 游戏。

        第 1 天:后院大恐慌

        在逛动画素材网站的时候,我发现了一些给力又免费的僵尸动画。有僵尸走动、僵尸被枪击中之类的。所以,这可能是个类似于僵尸射手的游戏。

        游戏角色会在他的走廊上,射杀从外面的麦田涌来的僵尸。游戏的名字就叫后院大恐慌。你可以转换不同的游戏角色,老奶奶、拿着猎枪的抠脚大汉或者是拿着远射程来复枪的大兵。下图是非常非常草的草图。

我是如何从0开始,在23天里完成一款Android游戏开发的 – Part 1~3

        更新:我刚才玩了会僵尸在美国。游戏倒是挺有意思,但是像疯子一样一直按射击多少有点无聊。我打算把后院大恐慌设计成一碰就死的模式,至少僵尸 里不要有 boss。我仔细的想了想,僵尸主题对我来说有点太阴郁了,而且只要市面上有,这个类型就不稀罕了。所以,我不确定游戏会不会做成这个类型。另外,这个游 戏看起来会涉及到 3D 图形,不过我会坚持 2D,至少我的第一个安卓游戏会坚持。

        第 2 天:安装 Eclipse,选择游戏库

        我下载了安卓包,然后在 Linux 系统上安装了 Eclipse。 能在 Galaxy S2 手机上运行“Hello World”。 你好 Java。我真的得记住所有这些 Java 指令,因为从 2002 起,我就没用过这些玩意儿了。

我是如何从0开始,在23天里完成一款Android游戏开发的 – Part 1~3

        看着这些 2D/3D OpenGL 类的东西,似乎用工具包/库来搭建游戏会是一个好办法。我从 NordicGame2013 上弄到一些免费的 Unity3D 序列号,但是还没有在 Google Play 上发行的权限。所以我想我得暂时跳过 Unity 了。现在我正着手于 CoronaSDK 和一些其他的库。

        【Part 2 – 第 3 至第 5 天】

        第 3 天:一个新的游戏点子

        在网上泡 Android 相关论坛,找点子的时候,我看到了《Revenge of the Titans》的一则广告。有着复古图像和漂亮动画的酷游戏。我也能做复古图像。所以,外星人会从太空降落到后院……

        不对!后院貌似不是个好点子。我想我得给游戏取个新名字了。

        外星人在边界上攻击了远程防守站。他们摧毁了自动系统,所以你不得不手动操作并射击。这个游戏可以叫 MANUAL OVERRIDE 或 EMERGENCY OVERRIDE。我在网上和 Google Play 上查了一下,貌似这两个名字,别人都还没用的。

        外星人的大型飞船在一个停靠站着陆,你必须要把他们赶在。他们可能躲在油桶后面,或者是已着陆的飞船后面等等。我想在游戏中加一些可摧毁的东西,放在敌人旁边。游戏可能叫 DOCKING BAY 或 DECK 42 之类的名字。

        名字听起来不是那么令人兴奋?嗯,是的。

        第 4 天:一个转变

        我一直在尝试画停靠站的图形,但他们看起来很垃圾,所以我正放弃了这个点子。战斗肯定是在太空中进行,这点不用改变。外星人会从屏幕的一端出 来,你可以在他们到达屏幕另一端之前射击他们。在底部有一些能被摧毁的东西。外星人可能躲在这些东西后面,你可以将这些东西打掉或者在上面射出几个洞。下 图是一个例子,里面有塔,卫星接收器和其它一些东西。

我是如何从0开始,在23天里完成一款Android游戏开发的 – Part 1~3

        我的想法是让玩家在有限的时间内(比如说一分钟),尽可能击毙更多的外星人。

        由于这个游戏有一个太空主题,我浏览了自己的字体集,并且找出了一些很酷的银河字体。目前,我将使用 AdourGM 字体,用于显示游戏中的文本,比如:points 和屏幕选项等。

        受到 Gimp 的星云教程的启发,我使用 Gimp 完成了上图。读了 Gimp 的星云教程,自己做了一些调整,我在几个小时内完成上述图。我讨厌在一件事情上花费太多时间,不过,还好这个背景在这个游戏的大部分地方中都能用到。

        第 5 天: libGDX 和图形的想法

        我选择了将要使用的库。它基于 java 语言,看似相当的完整。我尝试搭建并调试了一个测试程序,可以很快上手。但我仍然困惑是使用场景(Scene),角色(Actor)以及其它的特性,还是 像以往那样自己搭建这些东西。这个库的文档缺少示例,也没介绍如何结合,这种情况下,我猜想自己将会不得不依赖于 Google。例如,没有任何解释,你应该如何连接角色(Actor)和怪物(Sprite)。如果你有近 20 个图形(或者其他类似的东西)一样的怪物(Sprite),应该如何处理。

        对于第一个项目,我想我刚学会如何使用怪物(Sprite),然后使用以前的经验来构建余下的。对于将来的一些项目,我可能会更聪明,会清楚哪 些我需要使用的东西已经有了。我只是讨厌先学了很多了,然后发现框架或者库不够灵活多变,不足以满足我将来可能遇到的一些非常规的想法。

        下面是我对复古图形的外星人的一些想法。大部分的时间,我先画在纸上。这也许只是一种习惯,但远离键盘和显示器会让我集中精力。

我是如何从0开始,在23天里完成一款Android游戏开发的 – Part 1~3

        【Part3 – 第 6 至第 8 天】

        第 6 天:第一批外星人和屏幕方向

        好了,现在有了一些复古风格的外星人它们正在到处飞。抱歉,暂时还没有 demo。这款 Andriod 游戏目前只有 .apk 格式的安装包。想必你不大可能安装一个陌生人发给你的安装包。总的来说,目前背景和星星已经可以载入而且还会慢慢移动。为了让星星滚动我在星星图案上调用 了 setV ()和 setV2()函数,并逐个增加计时器的值。像这样:

scrollTimer -= delta*0.014;if (scrollTimer < 0.0f)      scrollTimer = 1.0f;  sStars.setV (scrollTimer);  sStars.setV2(scrollTimer+1);

        然后出现了一些外星人,它们会向右移动。这就是这款游戏目前所有的功能。我仍然在学 libGDX,因此会花大量时间 Google、阅读手册或是看视频。

        小贴士:我注意到一些借助 libGDX 开发的游戏通常会固定屏幕方向。在翻转设备时游戏界面不会转动。我在 SO(StackOverflow)的一些缺头少尾的跟帖和评论中找到了一个简单的解决办法:只要将 AndriodManifest.xml 文件中的 landscape 用 sensorLandscape 替换就可以让屏幕随着设备一起自动翻转。

我是如何从0开始,在23天里完成一款Android游戏开发的 – Part 1~3

        第 7 天:改变布局和屏幕方向

        现在可以射击外星人了。由于是复古风格的图形,我决定在外星人爆炸时采用大像素(在 Gimp 里使用无差方式将外星人图片放大 5 倍)。然后写了一点碎片管理代码,在 libGDX 从中央向其它方向随机发射碎片时进行中间计算。

我是如何从0开始,在23天里完成一款Android游戏开发的 – Part 1~3

        也许你注意到屏幕上没有图形表示你自己。这是有意为之的。如果你没有意识到这一点也没关系,因为这是第一人称射击游戏。搞笑吧!嘿嘿,至少从技 术上来说是这样的。你不必知道你在哪儿,只要射击敌人就好。在一些测试版本中,我也尝试了对外星人做一些尺度上的变换以增加纵深感,让你感觉它们从远处过 来。但在安卓设备上用手指是很难射击那些很小的东西的,所以我放弃了这个想法。

        为了让这个游戏更加有趣,射击外星人用的激光枪需要不断补充能量。每把可以射击 10 次,然后需要点击屏幕左下角的能量按钮。我现在还不确定它的特性——因为还需要测试。

        当我在测试这个功能的时候有件事让我很头疼:当射击外星人的时候我的食指会满屏幕点,很难看清屏幕上发生了什么。然后我看了一些自己手机上各种 安卓游戏,意识到如果屏幕方向是纵向的效果会更好。在纵向模式下,食指不是从屏幕下方而是从右边过来的(当然你需要习惯使用右手)。在这种模式下,屏幕的 大部分区域还是可见的。我还改变了外星人飞行的方向,外星人会从屏幕上方出现而不是之前的从左向右出现。

        同样基于这个原因,我还改变了游戏的主要设计。你可以一直玩到让一个外星人越过你,而不是之前的只能在固定时间内玩。起初我的想法是你可以每次 玩一分钟, 在这一分钟内你要尽量多得分(类似于水果忍者的加分规则)。现在我的想法是,虽然你可以有 3 条命,然而一旦你让外星人越过了你游戏就到此结束。

        后来我还修改了背景星云图。之前我写过怎么用 Gimp 画带有星星的夜空和星云图,但是每次不得不为了满意的效果而做很多实验。可以通过对两个图层做减法并增加一些固有噪声,然后镀上一层渐变颜色以达到效果。 问题是当对两个图层做减法的时候总会产生一些“小”星云图,而我想要的是整个屏幕都充满色彩。我用画笔随机地在画纸上点一些点,然后着上不同颜色。我把星 星分成 3 个图层:第一个图层,给每个点加上一个两像素的阴影(没有补偿),第二个图层进行模糊化,第三个图层让它保持原样。这个技巧可以画出很好的星星效果,奥秘 在于保证相近的点有不同颜色或不同的清晰度。而这也正是真正星空所具有的特点。看起来相近的星星其实相距N光年之遥,只是从地球上看起来他们比较接近而 已。

        第 8 天:星空之战

        我在试着给这个游戏起个新名字。虽然想了一个“星空之战”,但是是否合适感觉仍然有待研究。我尝试了一些字体,后来决定使用一种叫做 Ruslan Display 的字体。

我是如何从0开始,在23天里完成一款Android游戏开发的 – Part 1~3

        今天我改进了外星人爆炸效果的算法。我一直在思考怎么让敌人看起来有一波一波的进攻。先有 10 波敌人,紧接着 boss 出场。通过一关以后游戏会有些加速,还会加入一些新的敌人。在每 10 级里(10,20,30…)都会有一个新的 boss。这个算法会一直重复执行,直到游戏者输掉为止。如果发现你想消灭所有外星人,游戏的速度会被设置为开始速度的两倍这样你需要付出很多的努力。

        下面是现在对能量提升的设想:

        有时限的能量提升,可以在游戏过程中收集到:

  • 盾牌(在屏幕的底部,防止一个外星人通过)
  • 分数倍乘提升器
  • 快速火力(只需手指持续按下然后到处移动)
  • 大炸弹(毁灭掉所有屏幕上的外星人)
  • 超能力(跳过十波敌人,但是获得所有分数)
  • 银河忍者(用绝地武士之剑腰斩敌人——水果忍者的风格)
  • 自动补充能量(自动为激光枪补充能量)
  • 多火力(同时有 3 或 4 个激光枪开火)
  • 多生命(启动游戏时有 4 条命)

        永久性的能量提升,可以在每次玩的时候不断升级:

  • 快速火力
  • 盾牌
  • 银河忍者
  • 自动补充能量

        待续

        翻译: ImportNew.com - ImportNew 读者   译文链接: http://www.importnew.com/6551.html