游戏代码编程教学 游戏代码编程入门


比赛
代码也写了几年,有时候在想如果现在给刚入行的自己一点建议也许能有一点帮助 。
所以本刊主要是分享一些对游戏编程入门的思考 。
本文由爱发电支持 。如果你喜欢我做的事情,你可以考虑在那里支持我 。
语言的选择 一开始更推荐从高级语言开始,比如Java,C#,lua,python,javascript 。这期间可以用一些游戏引擎学习 。如果你因为喜欢游戏而学习编程,你可能不喜欢总是打印一些文字,你可能更喜欢输出图片 。
可以直接从相应语言的游戏引擎做几个小Demo来了解游戏结构,但是游戏引擎的缺点是API太多入门有点困难...
游戏引擎的好处是玩游戏会更快,但是整个引擎还是略显庞大,不适合学习代码 。
然后你可以用pico-8,love2d,pygame,SDL或者直接javascript操作canvas canvas尝试制作游戏,挑战你的编程能力 。
而C语言(包括C++)可以放在后续学习中 。学习C语言可以理解语言底层的东西 。指针允许你直接访问内存,这在其他语言中很少见 。一般来说,你可能感觉不到它的强大,但是当你面对资源受限的系统(需要手动内存管理),比如在GBA和NDS上编程,你就绕不过C语言,甚至汇编语言 。
一定要多动手 在我学编程之前,我是一个爱读书的年轻人 。所以,刚开始学写代码的时候,总是看书不实践 。有些东西看似懂了,其实还是要入门才能彻底掌握 。
写代码最好带着问题学习 。编程其实就是分解复杂的问题 。例如,在制作一个小演示时,您可以考虑这些问题:
如何显示一个图片/精灵 如何播放帧动画 如何控制两个物体碰撞 两个物体碰撞时候销毁其中一个同时生成一个物体播放帧动画特效然后播放完成之后销毁 如何播放音乐音效 背景层滚动效果怎么做 如何处理存档(数据持久化)而之后可以考虑的问题可能是:
精灵的显示如何分清楚哪个先渲染哪个后渲染(渲染层次) 每次播放特效都生成一个物体然后销毁是不是有点浪费内存,可不可以一次生成多个重复利用(引入了对象池) 存档时候如果 A 写入存档还没结束时候 B 又写入存档会不会出问题(引入了文件系统使用单例)不要执着于 Opengl 游戏行业比较流行图形,可能感觉能有多高就有多高,但是对于新手(非新手其实也一样),更应该关注游戏性 。
刚开始写代码没多久,我就跑去拿了一本opengl红宝书啃了起来 。写了一堆代码,最后什么都没学到 。
先不要考虑3D,还是从简单的2d开始比较好 。这个时候我推荐看看代码本色和游戏人工智能,锻炼自己的代码能力 。
就算你想学图形着色器,我更多的建议是直接用Unity 。首先,学习如何编写一些着色器(Unity着色器和屏幕特效开发的推荐技巧) 。你可以写一些比较特效之后,再回去写那些渲染管道Opengl,会让你感觉更好 。
不要禁锢在游戏引擎中 现在游戏引擎很方便,写软件的目的就是为了更好用 。
但是新手一直使用游戏引擎很难提高自己的编程水平 。我个人的建议是,可以先从游戏引擎入手,然后尝试不使用引擎,使用上面提到的框架或者工具来制作游戏 。
造点小轮子有助于提高 很多人说不要反复造轮子,但有时候别人的轮子比起重量级的来说,还是不够轻 。自己编写轻量级的轮子也能提高编程能力,更能享受编程的乐趣 。
比如用上面提到的底层框架(比如SDL)做游戏然后写一个简单的地图编辑器,粒子系统,存档文件保存和读取系统或者菜单系统 。虽然你做出来的东西比不上专业引擎做出来的东西,但总有一天你会回到引擎上,用不同的解决方案来看待一些问题 。
注意数据结构的应用 刚学数据结构的时候,会对它在游戏开发中能做什么感到困惑 。当初学数据结构的时候什么都不懂,除了图的消息队列和网络编程 。
堆栈应用:在处理菜单的时候,比如进入设置菜单的时候,在堆栈上推新菜单,返回的时候再销毁 。当游戏场景进入一个房间时,可以暂停当前游戏场景,然后叠加新的房间场景 。
队列的应用:当需要缓冲输入时(比如格斗类游戏),可以使用队列来控制输入操作 。在某些技能体系中,比如一回合,拥有8个物理槽位的玩家组合攻击 。队列也可以用来制作回放系统 。
树的应用:基本上,当你需要面对树枝,每个树枝都有分支的时候,你就需要考虑了 。典型的如剧情或对话树,节点下有很多子对象,子对象可以有很多子对象,这也是它的应用场景 。
图的应用:在可视化过程控制中,有限状态机和导航系统都能找到它的影子 。


推荐阅读