怎么编程游戏?游戏编程入门指南( 二 )


堆栈的应用:在处理菜单时候比如进入设置菜单时候把新菜单压栈操作,返回时候出栈销毁即可 。在游戏场景进入到一个房间时候可以把当前游戏场景暂停然后把新的房间场景压栈 。
队列的应用:在一些需要缓冲输入时候(比如格斗游戏)可以使用队列来控制输入操作 。在一些技能系统比如一回合有8个体力槽玩家来组合攻击 。在制作回放系统时候也可以使用队列来制作 。

怎么编程游戏?游戏编程入门指南

文章插图
树的应用:基本是当你需要面对分支而且每个分支都有分支时候需要考虑 。典型的比如剧情或者对话树,在节点下有很多子物体,子物体又可以有很多子物体时候也是它的应用场景 。
图的应用:在可视化流程控制,有限状态机和导航系统都可以找到它的影子 。
游戏开发设计模式应用
这个其实有专门书籍进行阐述,我也只是班门弄斧而已,我只谈论几个对于我初学时候比较有收获的 。
单例模式:在很多人刚开始接触游戏引擎时候都会面临一个问题是场景切换不销毁数据,不推荐的做法也是一些初学者会犯的是把数据保存到本地,然后下个场景再读取 。这种直接进行读写操作是不可取而且当你要保存的是一个游戏对象()时候就没办法了(当然其实也可以序列化对象保存到本地但仍然不可取) 。这个时候比较可取的就是保存到一个全局的静态对象/变量上,这就引入了单例模式 。还有比如一些系统只能有一个入口不允许随便使用不然会出错,比如典型的文件 IO 和控制器输入控制 。
数据驱动:在 Unity 的中明显就是数据驱动,其核心思想就是改动数据而不必改动代码 。而当你要使用数据驱动时候一定要分清楚什么可以硬编码什么可以数据驱动,配置太多的话是很影响开发效率和可阅读性 。
降低指针跳转消耗:我觉得这个也是 ECS 提出的原因之一,在大型游戏中面对的是巨量的游戏物体,这个时候游戏物体中又有各种指针跳转的话造成的性能消耗就不能忽视了 。所以在写代码时候要注意降低指针跳转,尽量让内存连续分布,比如使用结构体和数组 。当然内存连续分布也可以减少内存碎片 。
原型模式:这个一开始好像是在 -x 里面看到过,一个接口来实现克隆当前对象 。在实际游戏中其实也挺常见,比如 GBA 的木叶战记中,鸣人使用影分身可以生成一个新的人物但是攻击力和血量减半 。在 Unity 中从窗口拖动到 Scene 中时候也是使用类似思路(应该吧) 。
注意代码整洁
这个更多是经验性的东西,我也难说做得很好 。保持代码可读性是为了日后你或者别人回来看代码能看得懂 。保持函数的单一职责很有必要,当你发现有些代码重复写了几次就应该思考这是否应该放到一个函数中 。你必须明白的是 Bug 总是会有的,总有一天你或者别人会重新看这些代码,如果在写的时候稍加注意,后期的维护和复用就会相对简单轻松 。
具体可以看下代码大全、代码整洁之道和这个视频 。
最后,制作游戏很有趣,写游戏代码也很开心,希望你也能享受游戏编程的快乐!
2019/12/23
推荐书籍
【怎么编程游戏?游戏编程入门指南】郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,谢谢 。