“设计模式在游戏里面有哪些应用?”

三个礼拜前看到这道面试题我是懵逼的,就算看了《设计模式》和《大话设计模式》,我可能也就强行的将一些模式强行的套用到游戏上。比如说说观察者模式在游戏当中的使用,还可能说一说回调机制,解耦什么的。但是如果细问,这个问题我真的没有仔细思考过,并且卡住了壳。

之前本科去北京一家游戏公司的实习,作为一个初级的客户端程序员,大多都是逻辑代码的堆叠。对于设计部分的思考大多都是来源于自己的猜想,其实看到《设计模式》当中的23种结构,对于3A游戏当中很多小系统我都有了自己的猜想,但是具体怎么实现,原理是什么,我仍然懵懵懂懂。

深深明白自己是个菜鸡,带着疑问,去图书馆里翻书,终于找到这本我认为相见恨晚的书籍:《Game Programming Design》。看到这本书,我有了如下的想法:

这本书是EA资深程序员写的,依据这本书,解答了我之前很多在网上学的零零碎碎的游戏知识,彻底解答了我很多的疑惑。比如状态机在游戏当中的使用、KD树是怎么用到空间分割的、游戏循环当中的步长设计、对象池的设计、数据驱动的游戏设计是什么……等等这些问题。从高中一直到研一,我坚持了我游戏开发理想已经5年了,但是凭着自己的兴趣终究有很多知识漏洞,这本书完美的填补了我许久的疑问。这本书当中涉及到了20个在游戏开发当中涉及到的模式。我细细的记了一遍笔记,并且迫不及待的想在之后的虚幻4学习当中,用C++写出这些优雅的结构。

读完了之后,深深感觉生活如此美妙,虽然我是深度学习在读,每天被逼着发论文的苦楚,只有抽时间读这本书才能有所安慰。

这本书的内容,本文不再赘述,发此读后感,感谢这位伟大的EA程序员Robert Nystrorm,并且记录一下,我读了这本书之后想通了哪些问题,再一次复习一遍。另外希望这些问题,能够帮助有类似问题的同学,更好的阅读这本书。

  • 命令模式是怎么完成手柄和键盘的操作输入,以及ctrl+z的实现。
  • 享元模式在游戏当中地形绘制的应用是什么?
  • 如何通过观察者模式去实现一个完美的“成就系统”(要注意不要耦合!)?
  • 原型数据建模是怎么一回事?那些json数据表怎么在游戏里面就变成一个个怪物对象了?
  • 单例模式在游戏当中的缺陷是什么?
  • 游戏当中常用的动作状态机的机制是什么?并发状态机、层次状态机、下推状态机的原理是什么?
  • 双缓冲在除了DX/OPENGL渲染方面之外,还有哪些应用?
  • 游戏循环当中怎么让游戏当中的虚拟时间与真实时间同步?锁帧是什么原理?
  • 每一个Obj的更新方法是什么?怎么让每一个游戏Obj在每一帧都进行更新?
  • 怎么通过构建虚拟机(VM)来实现数据驱动的游戏设计?
  • 通过子类沙盒来避免大量技能设计的代码冗余。
  • 如何不用多态来实现类型的多态效果,从而避免虚指针表的使用?
  • 组建模式在Unity的GameObject的原理是怎么样的?
  • 事件队列在游戏当中的角色是什么?
  • 一些全局的类型如何在避免单例的同时,还可以实现全局访问?例如:日志管理、内存分配等系统。
  • 如何通过数据的局部性来提高效率?(这个类似于《深入理解计算机系统》当中的一个章节)
  • 如何使用脏标记模式来提升效率?例如从局部坐标系转换到世界坐标系?
  • 对象池的设计以及原因是什么?
  • 怎么快速确定游戏世界当中两个NPC之间的位置?四叉树、八叉树以及KD树在空间分区的角色是什么?(这个是前几天-19年字节跳动的引擎工程师的笔试题之一

与君共勉,继续努力!向着理想前进!前进!

07-07 11:19