从学校到现在,多多少少也开发了各种各样质量不一的小游戏。这里做一个小小的总结,虽经验有限,旨在促进以后的进一步学习。
主要的上手方式:
- 正视游戏开发
- 确定游戏的类型和开发平台
- 选择一个合适的引擎
开发中需要注意的学习重点:
- 对开发语言的学习
- 对引擎api的学习
- 相关数据结构与算法的基础
- 常见的游戏设计方式与问题解决的办法
比较显著的提高方式:
- 动手写项目
- 自己写一些常用的游戏工具
- 自己写总结
1.正视游戏的开发
很多人觉得,做游戏开发是一件很难的事情。以致于一提到游戏,就离不开数据结构,离不开算法那样的话题。但是在我看来,游戏开发的门槛远没有如此之高。只要你有编程的基础,思维逻辑不算太绕不过弯,都能写出很好的游戏来,尤其是在现在,各种各样的游戏引擎一个接一个的出现,在很大的程度上,方便了我们对游戏开发工作的上手。只要做简单的学习,就能步入游戏开发的大门。
简而言之,就是对于游戏开发,心里不要虚,只不过是个强交互的app而已。
2.确定游戏的类型和开发平台
确定游戏类型和平台是很重要的一件事,这关系着你最初开始步入游戏开发能不能成功迈出第一步的问题。如果我擅长使用js,那我在初入手的时候,肯定优先选择js作为第一开发语言,如果擅长使用java或者c#,那么久选择你擅长java或c#。
游戏类型方面,推荐从简单的横版过关类(魂斗罗,超级玛丽),跑酷类(天天酷跑),飞行射击(微信飞机大战,坦克大战)类等等类似的类型来入门。为什么?如果一开始你就选择做像棋牌,像三消这样的依赖于大量数据结构与算法的游戏,做起来会相当吃力。学习的过程应该是循序渐进,由简至难。
在初入手开发游戏的过程中,对于游戏框架或者游戏引擎的学习成本是很高的。如果在你不熟悉的语言领域,或者选择与能力相距太大的游戏类型,那么你需要同时进行学习多个方向的学习来保证正常的开发。这把本来就不低的学习成本又提高了一大截,而且很容易让人由于做不出像样的东西而产生挫败感。很多人因为中途放弃,不外乎这两个原因。
选择合适的游戏类型和游戏开发平台决定了你初学的过程是相对轻松还是困难。
3.选择一个合适的引擎
在做好了第二点,现在第三点就轻松很多了。每种语言都有人为之开发不同的引擎,这个稍微百度一下都能找到不少答案。我这里只是做下世面上最常用的一些推荐,可以根据自己的习惯爱好来做选择:
1.Unity3d
适用语言:C#,javascript
上手难度:3/5
平台:全平台
世面上最火的游戏引擎之一,文档齐全,教程普天盖地,收费。
适用语言:C++,javascirp,lua
上手难度:4/5
平台:移动端,win桌面端与h5
上手有点难,但是在移动2d游戏开发上占据主力,免费
适用语言:javascript
上手难度:1/5
平台:h5
在日华人自己封装的一个h5库,初学入手很容易,仿as3.0的语法,后期可以做游戏引擎的源码研究
适用语言:typescript 后者:javascript actionscript typescript
上手难度:3/5
平台:h5,移动端
两者api很相似,后者主打性能牌
5.青瓷
适用语言:typescript javascript
上手难度:2/5
平台:h5,移动端
和unity几乎一样的界面,但是文档相当齐全,入门门槛很低
6.pygame
上手难度:2/5
平台:pc
很有名的python游戏引擎
引擎方面就不介绍太多,列举的这几个都比较有代表性,每种不同的引擎,都有其自己的开发思想与理念,可以根据自己擅长的语言选择一款,然后等技术成熟之后再去了解另外的,这样对于整个引擎的开发思想会有很好的帮助。
4.对开发语言的学习
前面都是游戏开发的一些准备工作,做完了准备工作下面就可以开始步入正题了。
首先我要说的是对开发语言自身的学习。很多开发者,尤其是在web开发方面,已经过分依赖第三方库,导致很多语言的基本概念都不是特别清晰。所以在学习游戏开发的过程中,对自身语言的学习也不能放松。相关的设计模式,也要做相应的了解。这些都是相当有用的东西。良好的语言基础足够让你的学习过程事半功倍。
5.对引擎api的学习
以下的所有的一切都是从良好的语言基础说起。如果觉得火候不够,返回第四步。
每个引擎都有自己的文档,但是你也可能会遇到那种文档不齐全或者很混乱的。这个时候,我们只能把源码抠出来,自己一行一行的看。Api的使用不仅在于做项目的时候查找方法,没事的时候瞄两眼也能发现一些不常用但是却令人眼前一亮的方法。
只有当你合理使用引擎提供的方法之后,才能表示你已经熟悉了这个引擎。
当然,仅仅是熟悉一个引擎和了解相应开发语言基础确实是能够开发初一些游戏来,但是这种游戏并不能体现出优秀开发者和普通开发者乃至拙劣开发者的区别。从第六点开始,就是最好的区分程序员水平的相应能力。
6.相关数据结构与算法的基础
前面的内容都是很基础的部分,大部分的开发者在前面的5点钟所能体现的差异性并不是很大。但是接下来我要说的,才是一些关键的部分,学好这一部分,我个人觉得才是真正提高编程能力和思维逻辑能力的诀窍。
在这里我肯定无法对数据结构和算法大说特说,或者一下让你有什么质的飞跃或者提高。这里我只简单举几个例子,让你了解到数据结构与算法所体现的实现同样功能的差异性。
第一个示例:
相信大家在学习编程的时候一定写过这样一个功能,那就是通过获取全班同学的分数,来给成绩单上的所有同学评定出:优秀,良好,及格等相应的等级。
大家的代码一定是这样:
1 |
|
这种判定方式形成了一种叫作树的结构,如图:
但是经过我们在日常中的实践发现,每次考试后的结果分布式下面这样的情况:
不及格:10%,及格:10%,中等:30%;良好:40,优秀:10%。
这样的话,上面的算法就存在问题了,因为有大量的样本在树的底层,比如我考了85分,我要经过前面的三次判定才能到达指定的位置。那如果总的样本只有几十几百,这样的最初的算法也算说的过去,但是如果样本的数量很大,或者在判定中还包含了另外的大量计算,那么我们就得想想办法去优化一下了。
这里我们根据考试成绩的分布结果,再来重写一下这个成绩判断的功能:
1 |
|
这样整个判定所形成的结构将会是下图的样子:
两个不同的算法,在具体的环境中所有花费的时间肯定是不相同的。第二种算法在现在的成绩分布计算上肯定是拥有很强的优势的。所以有的时候,算法离我们也没有想象中的那么远。还记得读书的时候老师说过的一句话,不知道是哪个大家提出来的:
程序,就是数据结构和算法的结合。
所以说,这些东西我们日常工作中早就接触过了,并没有什么神秘的。但是之所以这里能体现程序员的差别,在于你能不能找出更合适更好的算法。
再举一个例子,最近看到的一个有趣的算法题:
如果我告诉你这个题目的解其实和上面给学生成绩排序的核心是一样的,你会不会相信。
题目最后给出的答案说的是二进制,这个说法还不够准确,其实真正的解决方案应该叫做哈夫曼编码,这个核心的算法叫做最优二叉树,也叫哈夫曼树。(小老鼠编码应该是M1~M10)
其实上面的判定学生成绩的小程序就带有最优二叉树的性质。
不过关于这些树啊,编码什么的,如果不是很清楚,可以随意在百度上搜一搜。有很多文章对这个问题讲的很清楚。这里我就不多说了。只是想说明一下,有些你不知不觉用的一些算法小技巧,可能就来自很有名的算法或者数据结构。所以完全没有必要为这些问题操心,遇到了花些时间去研究下就能弄明白的。
7.常见的游戏设计方式与问题解决的办法
这个就主要来自经验的积累了。就像很多程序问题,如果你自己不亲身经历,哪怕你给写的清清楚楚,但是时间一久也会忘记得干干净净。不同类型的游戏有着不同的设计方式以及问题的解决方式。主要来自个人对游戏的理解和对游戏质量的要求。
8.动手写项目
前面都是一些来自我的学习经历和一些经验。下面要说的和技术学习的话题就不一样了。因为主角不是我,是你。
不动手的话,说再多都是白搭。
9.自己写一些常用的游戏工具
这个需要根据自己的能力来。在写游戏的过程中,难免会遇到一些游戏引擎无法给你解决的问题,或者引擎的解决方法不方便的问题等,这个时候我们需要封装自己的方法,或者写一些常用的小工具。这个对引擎的机制理解会有很大的提高。日后有机会,自己写个小引擎也不是不可能的。
10.自己写总结
你不写总结,你怎么知道你学到了些什么,你咋保证你不会忘记?
本人水平有限,以上的经验仅供参考,只是希望能帮助那些想做游戏,却又不敢动手的程序员们。