[转翻]游戏设计中设计模式的应用
原帖见这里。这篇回答列举了四人帮那本著名的书籍里的范例在游戏中的应用。
Kylotan,125票:
我来个认真的回答吧。不要把底下这些建议当作必须采用的建议,它们更像是一些可能采用的例子。
- 生成器模式:set up component-based entity one component at a time, based on data(译者猜测是用生成器模式来生成Component,一个实例只用一个Component)
- 工厂方法:要创建GUI或NPC的小部件时,先去从文件里读字符串,根据字符串来创建。(译者:这真的是工厂方法吗……)
- 原型模式:创建一个通用类人物“Elf”,有各种初始属性,以后要用其他人物的时候只要克隆这个实例就好了。
- 单例模式:(译者:原作者在这里留空了。)
- 适配器:把你用到的第三方库全部封装到一层里,让那一层就像是你写的其他代码,在DLL里非常有用。
- 组合(Composite ):用可渲染的物体来搭建你的场景(换言之不要让你的场景里出现不可见的功能性Object),或者做一个不使用树级结构Widget构成的GUI。
- 外观模式:通过提供简化接口来简化你使用的第三方库吧,这能让你未来的生活更加舒爽。
- 享元模式:存储并共享一个NPC不变的部分比如模型贴图动画,并把它们和那些变化的独立部分比如位置生命值分开。
- 代理模式:在客户端做一些小类代表服务器端更大更复杂的类,并且用网络来提出请求。
- 责任链模式:handle input as a chain of handlers, eg. global keys (eg. for screen shots), then the GUI (eg. in case a text box is focused or a menu is up), then the game (eg. for moving a character)
- 命令模式:把游戏的所有功能封装成命令,可以在命令行里输入的那种,然后就可以保存重播了,还可以用脚本来调试游戏。(译者:这真的是命令模式吗……)
- 中介者模式:在游戏的各种组件通信之间加一个中继者,用它来实现游戏机制。(比如按顺序读取生命值组件的内容,然后把数据传给AI组件)
- 观察者模式:可渲染物体(视觉效果)只要静静地听逻辑层的事件传递就好了,必要时依次修改这些可视物体,但是不需让逻辑层和任何渲染代码有交互。
- 状态:用状态机控制NPC AI,比如攻击,闲逛,逃跑这些状态。每个状态可以有自己的 Update() 方法并且单独获取和存储它们需要的数据。
- 策略:根据不同的地形,在你的A*算法中使用不同的启发式函数,甚至你可以用同一套A*框架同时做寻路和更一般的计划。
- 模板方法:设定一套战斗程序,每一步可以用不同的函数,比如减少子弹,计算命中率,决定是否命中,计算伤害,然后每种攻击方式和技能虽然还用同一套战斗程序,但是里面每一步的函数都不一样。