从辞职到开发游戏上线,分享我的创业经历与农村生活体验

昵称 6个月前 108浏览 0评论

(一)

辞职开始开发自己的游戏已经好几个月了,游戏也上架了AppStore,我觉得应该写点东西留点回忆,跟博主们分享一下我的创业经历。这篇文章可能不是一篇成功的创业经历,因为故事还在继续。

这篇文章主要讲一下自己的一些经历。

我出生在河南的一个小村庄,小时候和爷爷奶奶一起生活,抓过蚱蜢,搭过马蜂窝,有时候还和爷爷奶奶一起下地干活。现在回想起小时候在农村的日子,还是很有意思的。还听说和爷爷奶奶一起生活的孩子比较聪明,不知道是不是真的,不过确实很多人说我比较聪明。然后大概6岁的时候,我就和父母去了青岛,因为人生地不熟,不太愿意和别人交流,性格也很内向。那时候我还愿意自己做一些小发明,爱玩模型飞机,爱玩四驱车,爱用冰棍棒雕出一整套武器,那时候我觉得我有一颗工匠的心,哈哈。

高中的时候我有了第一台电脑,不过一开始只是用来玩游戏。后来我爱上了Flash动画,于是看完了一本书,做了几个小动画。那时候觉得很有成就感。我在家乡读大学,一流大学。那时候上大学什么都不懂,也没有什么明确的目标,大学四年都在玩游戏。现在想来,如果那段时间能有点兴趣,做点有意义的事情就好了,比如自学游戏开发、动画制作等。

我是09年去的北京,第一份工作是.net开发,了解了.net的发展流程,做了一些JavaScript的工作,学习了jquery、Ext(现在叫Sencha)这些前端框架。第二家公司是一家信息公司,我去主要是教一些毕业生如何使用Ext框架,做了两个项目。第三家公司是一家线下o2o小公司,我负责一个系统的开发,但是因为市场的原因,项目没有发展的更好,后来听说公司招到了投资,人比较多,最近老板让我推荐一个.net开发人员给他。第四家公司是一家电商公司,主要在前端做CPS广告联盟,在后端做彩票,我负责彩票技术。当我知道我在这里负责一件事的时候,我的个人能力提升的很快。在这四家公司我一干就是6年,当时离开的原因也是这几点:薪资、兴趣、部门变动。 现在觉得确实是有点频繁,而且对各个公司也没有比较深入的了解。

7月份从上一家公司辞职,在家休息了两个月,主要是为了休息,处理一些家里的事情,思考一下以后的路。

9月份的时候我和几个同学商量决定做一款小众解谜手游,但是都是兼职,人员2个开发,1个策划,1个美工,可以说没有一个是专业做游戏制作的,也没有一个有移动端开发经验,2个开发之前都是做.net开发的,包括我,美工也是请来的,因为这个同学懂一点PS,所以我们就行动了起来。

我和另一位开发者商量了一下,决定优先在 iOS 平台上线,这样可以更快上线和试用。我们使用了苹果自家的 Swift 作为语言,Spritekit 作为游戏引擎。接下来一个月的开发就是学习这门新语言和引擎的过程。这期间,策划也在忙着做游戏设计。

(二)

上一篇文章主要介绍了我的个人经历,这篇文章主要讲一下学习一门新语言的过程。

上次提到我最终选择的语言是Swift,框架是SpriteKit。上次有网友问为什么选择这两个,为什么不用Cocos和Unity。我觉得Cocos和Unity比较成熟,但是一开始觉得需要接触的东西比较多,学习成本对于我来说会比较高。SpriteKit本身是集成在Xcode中的,对于新手来说省去了很多配置工作,可以很快的投入到开发工作中。目前使用SpriteKit的人还不是很多,现成的开发库也比较少,遇到问题不容易解决。这一点在我们后期的开发中可以感受到,不过Swift在Xcode中的编码和调试还是比较顺畅的,所以想要自己制作游戏的朋友还是根据自身的特点选择合适的框架吧。

接下来我们就进入正题,讲一下我学习Swift和SpriteKit的过程。

当苹果推出新语言的时候,我就对它很感兴趣。我一直想做移动端应用,所以一直在关注。期间还看了一本中文的 Swift 语法书,觉得这个语言其实跟 C#、JavaScript 很像。当时也没觉得有什么特别,只是形式上有些变化,但感觉比 Object-C 的语法容易理解很多。

刚开始学习SpriteKit的时候,也在网上找过书,但是SpriteKit的中文书实在太少,根本就买不到。后来在某技术网站上找到了一套入门教程,看上去还挺合适的。那套教程原价几百元,但我在淘宝上花了几十元买了学习码,可以直接学习,不过只能看一个星期,所以没几天就停了。每天看好几课,每课的例子我都记下来,有时候一看就是看到凌晨,感觉除了高考,从来没有这么努力过。看完了整套视频,写了几十个小例子,可以说对游戏开发和SpriteKit有了初步的了解。

在学习SpriteKit的过程中,我发现了自己在Swift语言上有些欠缺,感觉需要重新了解一下语言基础,于是下载了Swift官方教程(The Swift Of Programming Language)。当时正值国庆期间,看到朋友群里的朋友发各种外出游玩的照片,而我却在小屋里看书。程序员的孤独谁能体会?当时我给自己定了一个目标,一定要在国庆期间看完这本书。我强迫自己每天看几章,而且是英文的。我的英文水平一般,可以想象这有多难。但我还是看完了大部分。后面的章节感觉对我的游戏编程影响不大,光看语言不实际操作,感觉提升不是很大,也不容易理解,所以就没有继续看下去。不过这本书确实写得不错,我在这本书里找到了一些后面遇到的一些问题的解决方案。

之后我找到了两个 Spritekit 的 群,在群里找到了一个比较新的 Spritekit 英文教程(Game Development with Swift),花了两天看完,对游戏开发的一些方面比较清楚,包括精灵、相机、动作、控件、物理引擎、碰撞、菜单、声音、GameCenter、上传到 Appstore 等。慢慢发现自己的英文水平提高了,书上大部分意思都能看懂。加入群还有很多其他好处,后面会讲到。

现在我已经学会了大部分基础知识,游戏设计也差不多完成了,对于自己要制作什么类型的游戏已经有了清晰的想法,可以开始制作游戏DEMO了。

这次我们做的是一个迷宫类型的游戏,其中涉及到的最重要的核心算法就是寻路算法。接下来的两天我就开始在网上搜索和学习寻路算法,最后发现有两个算法用的比较多,一个是Dijkstra算法,一个就是A*算法。Dijkstra算法是比较有代表性的求最短路径的算法。A*算法引入了一个评价函数,估计值越接近实际值,评价函数就越好。A*算法在游戏中用得比较多,而且效率也比较高,所以我们也选择了A*算法,并且用这个算法写了一个小小的寻路DEMO。

今天就到这里吧,写这篇文章的时候,我们正在推广我们自己的小游戏,推广确实不容易,后面我会讲一些我们的推广方式和渠道。

(三)

这次我主要讲一下我们的发展历程。

策划是我们团队的一个人负责,我们负责提建议。我的理解是,策划首先要对正在做的事情有一定的把握,也就是尽可能多地思考事情的范围,类似于项目管理中确定项目的范围。知道了范围,才能很好地制定相应的目标。

我觉得画原型还是很有必要的,我们做的时候并没有做出很清晰的原型,以至于开发的时候都在讨论界面要是什么样子,交互要是什么样子,影响了项目的进度。

我制定的计划,从开发到上线一共花了25天,包括美术设计、程序开发、音频素材制作、测试、上线、宣传等,虽然在开发过程中计划有所改变,但还是有必要的。

一旦制定了计划,就要严格执行。在执行过程中我们也遇到了一些问题,比如在美术方面。因为我们的美术师不是专业美术师,而是兼职美术师,所以美术工作还是比较有挑战性的。我们一直积极帮助美术师找素材,讨论美术风格,也下载了很多游戏来学习和参考。64G的手机里装满了各种应用。这期间我还负责整个项目的进度把控,以及一些技术的实现。确实压力很大。这时候我只是更多的想着上线之后会是什么样子。推荐一个国外的开源游戏素材网站:“open game art”,里面可以找到一些免费的设计素材和声音素材。

代码管理采用国内开源中文Git方式托管,由于两处开发并不在一起,所以还是比较方便的。

在开发过程中我们确实遇到了很多问题,比如寻路算法慢,删除精灵后内存不释放,播放声音内存占用不断增加导致崩溃,子弹轨迹导致宝石无法被选中等等。接下来我会详细讲解一下我们是如何解决这些可能是技术人员非常关心的问题的。

1.寻路算法比较慢,因为用的是Swift自带的数组,也就是直接用生成的数组。我觉得苹果还没对Swift的数组查询效率进行优化,当数组对象达到几万个的时候,每次查询的效率是几十毫秒,因为A*算法每次节点判断都需要进行一次查询操作,当节点数量很多的时候,可能就要几十秒了。这当然不能满足需求。我无意中尝试了一下使用object-c的数组对象NSMutableArray,发现效率明显提升,每次寻路不会超过一秒。更方便的是Swift可以直接使用以前object-c中已有的对象。

2.精灵删除后内存不释放的问题是这样的,子弹对象有攻击目标的属性,当移除攻击对象的精灵时,对应子弹引用的攻击目标的对象不等于nil。这是因为Swift也是根据引用计数自动释放内存的,但是Swift默认是强引用,只要在引用的对象前面加上weak关键字手游开发,就代表我不再持有这个对象了。感谢Swift官方的教程,让我知道该如何解决。

3.播放声音时内存占用不断增加,导致崩溃的问题。一开始我用的是SKAction.playSoundFileNamed这个方法,我觉得这是SpriteKit的一个bug,用这个方法播放多个声音时,内存会不断增加,直至崩溃。我也在各个网站找过这个问题的解决方案,去了Stackoverflow和苹果官方论坛,也看到过类似的问题,但是没有找到很好的答案,也在这两个论坛上发过帖子,也是第一次在Stackoverflow上用英文和外国友人交流。针对这个问题我也尝试过一些其他的方法手游开发,最后还是用了Swift的底层声音播放库AVAudioPlayer来实现多声音播放。

4.子弹轨迹导致无法选中宝石。这个问题是因为用粒子特效做子弹,当子弹过多时,对应的宝石就被遮住了,导致无法选中宝石。最终解决办法是根据触摸坐标找到选中的宝石,而不是直接用nodeAtPoint(location)方法直接根据点击获取节点。

其实其他的问题我就不提了,但是感觉印象最深刻的就这几个,我记得自己在解决的时候,有时候一做就是一整天,到凌晨还精神抖擞,就觉得这个问题一定要解决,这种心态可能跟很多技术人员是一样的。

接下来说说测试,由于没有专业的测试,所以测试都是我们策划负责的,我觉得不要自己测试,尽量找别人测试,这样可以从多个角度发现一些问题。

另外,多人开发时如果出现问题,尽量及时沟通。

我们的项目计划执行总体上是一致的,但根据实际执行情况,中间会有一些变化。比如因为美术问题,计划就被更改了,推迟了2天。我们也考虑到测试完直接上线会比较有风险,因为毕竟我们只是小范围测试,没有进行大规模测试,肯定会出现一些意想不到的问题。所以我们在计划中增加了一个内部测试阶段,并推迟了上线日期。

我们成功邀请了200位来自各个渠道的玩家参与内测,内测过程中确实发现了很多问题,玩家也给出了很多合理建议,游戏玩法和稳定性都得到了很大的提升。下期我会详细讲讲我们是怎么运营内测的,以及上线的一些事情。

最近这款应用的排名从付费榜200多掉到了总榜500多,确实有点超出我们的能力范围。

很多朋友都想玩我们做的这款游戏,我简单介绍一下吧,这是一款益智游戏,上手难度有点高,但确实是一款考验想象力和智商的游戏,需要搭建一个狭窄的迷宫,合成高级特殊宝石才能过关。目前已经在iOS平台上架,在AppStore搜索Gem Tower Defense,第一个就是它了。

点击关闭
  • 客服QQ:

    744926664

    -------------------

分享:

支付宝

微信