当前位置: 代码迷 >> Iphone >> iphone开发新的感受
  详细解决方案

iphone开发新的感受

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

原文链接地址: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翻译,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢!

  相关解决方案