游戏代码也写了几年, 有时候在想如果现在给刚入行的自己一点建议也许能有一点帮助。
所以这篇日志主要是分享一下自己对于游戏编程入门的一些想法。
这篇文章由爱发电支持写作, 如果你喜欢我做的事情,可以考虑在那里支持我。
语言的选择
在一开始更多是推荐从高级语言入门,比如 Java、C#、lua、python,javascript。在这个时期可以配合一些游戏引擎来学习,如果你是因为喜欢游戏才学习编程的可能不喜欢老是 print 一些文字,可能更喜欢输出图片。
可以直接从对应语言的游戏引擎开始做几个小 Demo 了解一下游戏构造,但是游戏引擎有个弊端就是 API 太多入门有点难……
游戏引擎的优点是做游戏会比较快,但是引擎整体还是略庞大,不适合学习代码之用。
之后可以使用pico-8、love2d、pygame、SDL 或者直接 javascript 操作 canvas 画布来制作尝试制作游戏挑战自己编程能力。
而C语言(包含 C++)可以放在后续研究,研究 C 语言可以对语言底层点的东西理解。像指针可以让你直接访问内存,这在其他语言中是很少见。可能一般感受不出来它的力量,但当你面对资源紧张的系统(需要手动内存管理),比如 GBA 和NDS 上面的编程时候就绕不开 C 语言甚至汇编语言了。
一定要多动手
我在没学习编程之前是个爱看书的小青年。所以在我刚开始学习写代码时候常常就一直看书没有实践,有些东西看似懂了,实际还是要上手操作才能掌握透彻。
在着手写代码时候最好是带着问题去学习,编程其实就是把复杂问题分解。比如在制作一个小 Demo 时候可以考虑这几个问题:
如何显示一个图片/精灵如何播放帧动画如何控制两个物体碰撞两个物体碰撞时候销毁其中一个同时生成一个物体播放帧动画特效然后播放完成之后销毁如何播放音乐音效背景层滚动效果怎么做如何处理存档(数据持久化)
而之后可以考虑的问题可能有:
精灵的显示如何分清楚哪个先渲染哪个后渲染(渲染层次)每次播放特效都生成一个物体然后销毁是不是有点浪费内存,可不可以一次生成多个重复利用(引入了对象池)存档时候如果 A 写入存档还没结束时候 B 又写入存档会不会出问题(引入了文件系统使用单例)
不要执着于 Opengl
游戏行业比较流行图形学,可能感觉起来高达上,但是对于初学者(非初学者其实也一样)来说更多还是应该专注于 GamePlay。
我在刚开始写代码没多久就跑去拿本 opengl 红宝书在啃,写了一堆代码到头来也没学到什么。