这个问题一直困扰我很长一段时间。我一直想知道游戏开发者是如何解决在某些流派中很常见的某些问题或情况的。是否有任何设计模式对游戏开发特别有用?
例如,如何实现典型角色扮演游戏(例如BG或TES)的任务?或者,如何在第一人称射击游戏中实施具有多种堆叠效果的武器(例如DN3D的收缩枪或冷冻枪)?你会如何用一个可能错综复杂的决策树来实现多项选择选项,从而导致几种不同的结果(例如WC中的任务树)?
这个问题一直困扰我很长一段时间。我一直想知道游戏开发者是如何解决在某些流派中很常见的某些问题或情况的。是否有任何设计模式对游戏开发特别有用?
例如,如何实现典型角色扮演游戏(例如BG或TES)的任务?或者,如何在第一人称射击游戏中实施具有多种堆叠效果的武器(例如DN3D的收缩枪或冷冻枪)?你会如何用一个可能错综复杂的决策树来实现多项选择选项,从而导致几种不同的结果(例如WC中的任务树)?
访客。
观察者。
命令。
代理(网络游戏)。
几乎任何创作模式。
想想,“场景图”。
游戏并不是真的与其他类型的应用程序不同,至少不是人们认为它们是。我说这是一个专业的游戏开发人员,也是一个专业的非游戏开发人员:)
请记住,这些不是典型的软件架构问题,通常的'设计模式'着手解决 - 它们是游戏设计问题,即。终端软件的一系列要求。因此,典型的软件模式并不适用。出于这个原因,你所描述的事物类型并不是真正的软件模式,因为在大多数情况下,在多个游戏中没有一致的规范和要求。这些功能在很大程度上取决于游戏设计和程序结构。各种书籍中肯定有例子 - 例如。游戏编程宝石系列是强烈推荐 - 但它们只是起点,您必须根据您的特定要求进行定制。
例如。任务 - 他们可以重复吗?任务可能是“失败”还是不完整?他们是否包含多个阶段?在甚至可以提供任务之前,是否有必须满足的标准?有没有需要更新的日志?最后是否有自动奖励?完成的条件是什么,以及他们如何以及何时检查?某些事件是通过接受任务还是完成而触发的?在追求中有没有玩家进步的概念?有些任务是强制性的吗?任务是以某种方式订购的?基于设计,所有这些都会在游戏中大不相同。
现在,有一些技术和方法,游戏程序员发现自己使用了很多,例如。嵌入脚本语言,使用2D散列或分区的空间数据库,有限状态机等等,但这些实际上只是通用工具,可以很好地映射游戏开发者面临的问题。
*设计模式*旨在解决软件问题,而不是游戏设计问题。我们面临的一个挑战是,在游戏中,“设计师”意味着与其他软件行业意义大不相同的东西,所以通常适合软件设计师的文献应该由软件人员而不是内容人员来使用。 – 2010-05-13 18:06:55
要使用你的任务示例,设计模式会发挥作用的一个显而易见的地方就是追求更新 - 在附加到玩家身上时,任务可能会以观察者的身份附加到玩家的各种事件上(比如“我杀了一些东西“事件或”我挑选了某件事“事件)。如果您查看虚幻引擎中的数据块之类的东西,那些位于Factory,Builder和原型模式之间。 – kyoryu 2010-05-14 02:51:17
(并且,FWIW,我已经在AAA标题的源代码中看到了GoF模式,不包括Singleton,不包括Singleton) – kyoryu 2010-05-14 07:26:27
我的愚见是,所有的模式可以是在游戏中有用但一般来说模式最强大的用法是从发展出现不针对特定的目标,前面的人。
换句话说,模式对于是是一个很好的方言。然而,作为实现策略,它们是非常糟糕的,因为它们以这种方式使用通常会导致复杂,臃肿和慢速的代码。
社区wiki,也许? – 2010-05-13 03:26:42
@Matti:当然,没有很多可能的答案。 – 2010-05-13 03:34:46