(译)我的第一游戏完成之后的5点心得体会

标签: 游戏 点心 体会 | 发表时间:2011-10-07 22:13 | 作者:子龙山人 chuang
出处:http://www.cnblogs.com/

免责申明(必读!):本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播。同时,转载时不要移除本申明。如产生任何纠纷,均与本博客所有人、发表该翻译稿之人无任何关系。谢谢合作!

原文链接地址:http://www.raywenderlich.com/1018/5-things-i-learned-making-my-first-iphone-game

教程截图:

    过去几周来,我在“闭关”,集中精力完成了我的第一款iphone游戏---但是,我现在又来写博客了。为什么?因为那个游戏上架啦!:)

    大家可能会问,那是一款什么类型的游戏。它的名字叫做 Math Ninja ,是一款教育类游戏,专门教小孩子学习数学用的。可以帮助小孩子学习简单的加法,减法,乘法和除法,而且学习过程变得非常有趣。这个游戏用到的技术包括,从《如何使用cocos2d来制作一个简单的iphone游戏教程》开始的一系列游戏教程中所提及的技术,美工则是我的老婆完成。

    不管怎么说,在制作游戏的过程中,我学到了很多东西。我觉得这些东西,大家可能也会有兴趣。所以,接下来,我会谈谈我从第一个游戏中所获得的经验。

1. 重新架构游戏完全ok

    我刚开始编写MathNinja的时候,那代码实在是太烂了。说实话,不是一般的烂。因为我也是一个cocos2d新手,所以,也犯了一堆错误。而且,我是一边设计一边开始编码的,结果导致代码的组织结构非常混乱,而且各种“补丁”程序遍布其中。

    因此,在项目快要完成的时候,我在思考一个问题:我是保持现在的代码风格呢,还是完全重新构架程序,因为我知道更好地组织游戏代码的方式。但是,其实我也可以完全没有必要这样做,因为,对于终端用户而言,他们并不关心你的代码风格,代码风格丑或美,对于用户来说是完全透明的。

    关于“重写程序”这个话题,网上有大量的讨论。Joel on Software(译者:此人写了3本书,现在有翻译版,大家可以去网上搜索看看。我全部看过一遍了,非常好。Joel被誉为程序员部落酋长,发表了很多独到的见解)把“以一种更好的方式重写软件”看作是最坏的决策,任何一家公司都不应该如此做。关于详细信息请点击此处

    我曾经也就这个话题参与到了争论之中,但是,最后我还是决定要重新架构--主要是为了获得一种“自我满足”和学习的目的。整个重写的过程几乎花了制作时间的一半还要多,所以,这个工作是非常耗时的。它不是简单的重构,而是对整个项目动大手术。因此,你可能会问,这么做值得吗?

   答案是,毫无疑问值得!我认为有以下原因:

  • 通常,当你有一个很稳固的游戏架构之后,往上面添加新功能是非常容易的。
  • 在重写过程中,我重新构架了关卡设计这块,我把所有的关卡都用配置文件管理起来,这样我可以更方便地进行游戏设计。(原因看下一条)
  • 在重写过程中,在保存和加载游戏数据的时候,我考虑了更多的情况,结果是,重写之后,整个游戏的加载和保存数据变得非常简单了。
  • 在重写过程中,我考虑了更多游戏性能的问题,结果是,重写之后,fps和用户响应都提高了。
  • 而且,可能最重要的是,对于最后的重构结果,我本人更加满意,更加自信了。而不是重构之前的一种“罪恶感”了。(译者:我觉得这一点非常值得我们学习。想想看,自己每天面对自己写的又臭又长的代码,你有罪恶感吗?你会花时间和精力去重构吗?你能忍受代码的坏味道吗?)

  我认为,重写这个过程中,我不仅更好地学习了所使用的代码库(指代cocos2d),而且学会了一种构建软件的方式。刚开始,你可能会犯各种错误,但是,如果你坚持重构下去。每次一点点,最后,你会发现代码结构越来越好,而且这个过程非常有趣。

   但是,保持重构的步调其它是非常难的,多久重构一次,如何保证“连续重构”,这些都要靠自己工作中慢慢体会。但是,我在重构的过程中,不仅改善了代码质量,而且也学习了新的游戏框架(指代cocos2d)。因此,重写对于我来说,是在“原型”(之前那个代码结构很烂的版本)的基础之上,还获得了额外的开发速度提升。(译者:可是有些人,特别是老板,可能不会赞成。如果你在开发项目的过程中,你跟老板说,请给我3天时间,我要重构。哈哈,这是不可能的。一则重构需要时间,3天?你搞得定吗?而且重构极容易引入bug。虽然现在的程序不是很好看,但是,至少能够工作。如果被你重构了一翻,结果不ok了。想必你老板肯定要生气。有人说,重构+完备的测试就可以解决了。但是,有谁真正在用测试驱动开发吗?我很质疑,我并不是质疑这项技术的好处,而是质疑,到底有多少人能做到。整个测试驱动开发的流程如何进行。希望看到这里的达人们,如果有TDD相关的经验,麻烦指点我一下,万分感谢!)

   在将来,我觉得可以使用其他更好的原型开发工具,比如coco2d的python版本或者Flash,等原型ok之后,再考虑一下代码组织和结构,然后再用cocos2d-iphone来实现之。这样比单纯用cocos2d-iphone来开发应该要好很多。因为,你在原型阶段就可以确定一款游戏的玩法可行不,如果不可行,直接否决掉。然后再开始新的创意,免得在一个错误的道路上劳民伤财。

2. 把游戏设计弄得越简单越好

  我第一次写MathNinja的时候,游戏设计完全是硬编码进去的。想要改变一个怪物的血量,我得把Monster类的好几个构造函数改一遍。想改变某个关卡出现一个特定的怪物,我也得改好多代码。还有武器、故事情节等等,都是直接在代码里面写死的,改动起来非常麻烦。

    改一改这些设置其实并不是很难的事,但是,每次你改一个地方,你都需要在那些头文件,实现文件里面切换来切换去。而且,如果你的程式中有魔法数字的话,你还得保证每一处都修改的一至,否则情况更糟。这么麻烦的事,最后只有一个结果,那就是,你自己也懒得改游戏玩法了。(译者:为什么?因为它实在是太麻烦了!程序员不喜欢干这种活!)

   这是一件非常糟糕的事。为了可以很方便地修改游戏设计,我把一些与游戏设计相关的元素,比如怪物状态,怪物出现的时机等,都编码到一个可编辑的文本文件里面。

   因此,在重写的过程中,我把大部分的怪物定义、关卡数据配置以及故事情节配置,都写到一个可以修改的xml文件中去了。然后我写了一个WPF编辑器来编辑这些xml文件,不过,后来我才发现,其实手工直接去改这些xml文件比其它任何可视化的xml编辑器都容易些,而且更有趣一些。

   在完成所有这些之后,整个游戏设计的工作就变得非常简单了。下面是具体原因:

  • 因为更改游戏设计更加方便了,所以,我可以随心所欲地修改游戏参数,使游戏变得更加平衡,游戏性更好,更有趣。
  • 测试变得更加容易了。我可以非常简单的创建出新的关卡,只需要改一改xml文件就可以了。比如创建一个新的xml文件就可以创建一个新的关卡。
  • 程序逻辑和游戏设计之间有很清楚的划分。这样可以使我的头脑中的设计思路更加清晰,这种感觉真的很不错!

3. 然而,游戏设计仍然很难

    另外一件事情,我学习到的就是,无论你把调整游戏设计的方式弄得多么简单,游戏设计仍然非常难。对于没有游戏设计经验的人来说,想要构思出一个非常好的游戏设计非常非常难,而且很消耗时间。

    我都记不清楚了,我把那些效果、伤害,武器的升级路径改变了多少次了。而且选择不同的武器,玩不同的关卡,这个过程测试了成百上千次。

  刚开始,我有点灰心了,虽然我成天花费大把的时候在游戏设计上面。但是,对于一个程序员的我来说,花那么多时间在游戏设计上面,简直像是在玩游戏,因为,我需要编码,而不是娱乐。

    但是,我马上就意识到了,把游戏设计弄好可能是游戏开发中最重要的一部分了。毕竟,那才是唯一能够使游戏变得有趣的方式。所以,花时间去调整和改善游戏设计是值得的。

   我发现,在游戏设计这条路上,我还有好多好多需要学习。我想有经验的游戏设计人员,他们肯定使用更多的数学知识和更多的excel表单来辅助进行设计,计算平均的DPS,计算每一帧能够造成的最大伤害值等等。再比如,计算出每个武器的攻击力,升一级之后的攻击力,升N级之后的伤害值等等。

    作为一个初学者,我所能想到的唯一的方式,就是不断地迭代、迭代,再迭代,直到好玩的游戏效果出来。没错,这样也能奏效(至少我希望是如此)--只是这个过程更耗时间而已。

4. 没错,你需要测试人员!

    在游戏的最后,我的妻子和我都非常满意这个结果,但是,在这时,你可以说“我们不需要测试者,我们的游戏很酷,直接可以拿去上架了”。这样做行吗?

   肯定不行!

   幸运的是,有很多朋友帮助我们进行了测试的工作。因为每个人玩游戏的年龄和水平都不一样,因此,对于关卡的难易度的体会也不一样。他们还找出了游戏当中的许多bug,非常多的bug。如果不是他们在测试阶段发现这些bug的话,暴露给最终用户会让我非常尴尬的。

  不仅仅如此,他们还给了我很多好的idea。

  总之,学到了很多东西---记住,不管你认为你的游戏或者应用有多么的好,都去找一些人来测试一下。你会有收获的!:)

5. 游戏最后10%是最困难的

    在我完成这个游戏之前,我记得有一个朋友跟我说过一句话,“游戏的最后10%是最难的”。

    他真是太神了!

   我发现,要估算完成一个像MathNinja这样的游戏所需的时间,这个工作实在是太难了。对于某一个应用程序,我非常有自信,可以估算出这个应用要花多长时间可以完成。但是,对于游戏,这个估算时间的工作真是太难了。

   我认为,这里面的最主要的原因就是,游戏永远没有真正意义上的完成。因为,你总是可以往游戏里面添加更多的新功能,总是可以把某一个效果做得更好,更酷。而且,你总是可以添加更多的新关卡。

   因此,你怎么能知道你需要多长时间来完成一款游戏呢?于对我来说,这是一个开放性的问题。说实话,我完全不知道,只是不断地修改游戏,直到我满意为止。即使还有一大堆功能我可以添加进去,但是,如果我满意了,我也就停止了。

   但是,其实,什么时候你找算把你做的游戏提交到apple store上面,这也是一个非艰难的决定。有许多次,我自己心想“差不多可以了”,但是,一两周后,我又添加了新的功能,还是没能如愿上架。

   更不要说在项目进行的过程中了,我越是想“项目差不多”要完成了,我就越是发现还有更多的工作。这个过程真的很烦人,我都是在精神上强制自己一定要坚持下去,把剩下的工作做好,这样才敢出门。

   因此,制作一个游戏,你需要耗费非常多的精力---而且,你必须做好准备,不管你做了多少艰辛的工作,到最后,你总是发现你还是需要更多的时间和工作才能完成。:)

你从制作你的第一款游戏中学习到了什么呢?

    制作我的第一个iphone游戏是我的编程生涯中最有趣的经历之一。当最后游戏完成的时候,我非常高兴,而且从中学习到了非常多的东西。

   各位看官,你们完成第一个游戏制作的时候,是什么感觉呢?都学到了哪些东西呢?我非常渴望跟大家交流,希望大家分享一些自己的心得,谢谢!:)

要论坛交流,请点击传送门

著作权声明:本文由http://www.cnblogs.com/andyque翻译,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢!

作者: 子龙山人 发表于 2011-10-07 22:13 原文链接

评论: 4 查看评论 发表评论


最新新闻:
· 六成开发者认为任天堂平台很糟糕(2011-10-08 13:40)
· 纽约时报:乔布斯最后的日子(2011-10-08 13:36)
· Android版TouchPad流向市场 惠普展开调查(2011-10-08 12:09)
· 任正非语录:企业发展就是要发展一批狼(2011-10-08 12:08)
· “下一个乔布斯”候选人:扎克伯格贝索斯在列(2011-10-08 12:07)

编辑推荐:第一次负责项目总结

网站导航:博客园首页  我的园子  新闻  闪存  小组  博问  知识库

相关 [游戏 点心 体会] 推荐:

(译)我的第一游戏完成之后的5点心得体会

- chuang - 博客园-首页原创精华区
):本博客提供的所有教程的翻译原稿均来自于互联网,仅供学习交流之用,切勿进行商业传播. 如产生任何纠纷,均与本博客所有人、发表该翻译稿之人无任何关系. 原文链接地址:http://www.raywenderlich.com/1018/5-things-i-learned-making-my-first-iphone-game.

如何查找技术资料----我的一点心得体会

- Yangan - 博客园-子龙山人
  作为一个IT人员,如果不能利用搜索引擎很快地查找到自己想要的技术资料的话,那么会很悲剧. 特别是面对新技术的时候,由于资料特别少,就算有,大部分也是英文资料. 如果这时候,你查找资料的能力比不上别人的话,很有可能就会在新一轮的技术竞赛中被甩在后面,比如现在很火的ios游戏开发. android由于搞的人多,资料也相对来说多一些,门槛也低一些,不需要mac,只要有一台pc就可以弄.

游戏指南

- Blacat - 韩寒
这是一个复杂的国度,人们并不是那么渴望文人范畴里的自由,如果你上街问问,大家都觉得自己过的挺自由. 人们已经习惯了在台上台下的两种话语,你只要不冲进他......>>点击查看新浪博客原文.

游戏开发商开源HTML5游戏

- - Solidot
游戏工作室Wooga开源了其开发的HTML5游戏Pocket Island,源代码托管在GitHub上,该公司在官方博客上介绍了他们的开发经验,认为HTML5游戏有潜力,但尚未做好准备,开源的意图将是让其他人了解他们的工作,学习和改进. Wooga认为,2012年也许不是HTML5的黄金时代,但它的黄金时代即将到来.

JS游戏引擎

- 米随随 - HTML5研究小组
If you don’t have anything better to do and want to help fellow redditors interested in JS game dev out, feel free to fork the list and modify it as you like.

Google+加入游戏

- Thomas - Solidot
Google宣布了Games in Google+,为旗下社交网站引入了游戏功能,Google+正从类似Twitter的信息交流平台变得更像是其竞争对手Facebook. 游戏暂时还没有对所有用户开放,但Google承诺会在不久以后让每一位Google+用户都能玩上游戏. 目前提供的游戏包括了愤怒的小鸟,数独,Bejeweled Blitz等.

我的iPad游戏

- Aim - Aether
说是以办公和看书为主,实际上从使用时间来看也是这样,但是不知不觉还是买了一屏的游戏(整个桌面也才三屏而已),这还不包括随时删掉的无数没啥意思的游戏. 晒一下清单,有兴趣的同学可以拿去. 支持多人对战基本都属于必买的游戏. 和iPhone、Touch,以及电脑上的多人联机游戏不一样的是,iPad的大屏幕和多点触摸允许多达四个人在一个iPad上面对面的游戏,这种体验和任何网络游戏只能面对冰冷屏幕的感觉是完全不一样的.

体感游戏合家欢

- Duo - 南都周刊-热点新闻
就像当初满腔豪情买下后最终被落满尘的跑步机健身器材一样,Wii在很多人家里也陆续步入 “偶尔想起来玩儿一下”“现在基本没碰”的阶段. 美国艺电(EA)总裁John Riccitiello认为未来体感游戏的发展应该建立在一个“更加细分的市场”上. 打打Wii还能稍微让身体动一下. 任晓米,24岁,游戏年龄:4年.

spy++和游戏修改器

- 大宝PKU - C++博客-首页原创精华区
这几天做了两个东西,spy++ 和游戏修改器. spy++ 就是模仿 vs的那个工具spy++. 游戏修改器,就是暴力搜索内存,找到我们关心的数据,然后进行更改. 总之这些东西做过之后感觉就是都不难,但是在做的时候多少会感觉点吃力. 闲下来无事,记录下它们的过程吧. spy++ 分析(用vs2005做的——).

与月亮一起游戏

- mechelle.04 - 碌碡画报