Design patterns 是否有任何设计模式对游戏开发特别有用?

Design patterns 是否有任何设计模式对游戏开发特别有用?,design-patterns,Design Patterns,这个问题困扰了我很长时间。我一直想知道游戏开发者是如何解决某些类型中常见的问题或情况的 例如,如何执行典型角色扮演游戏(如BG或TES)的任务?或者,您将如何在第一人称射击中实现具有多种堆叠效果的武器(例如,DN3D的收缩枪或冷冻柜)?你将如何通过一个可能会导致多种不同结果的复杂决策树(如WC中的任务树)来实施多项选择选项?如果你阅读《四人帮》,整个创作模式部分都是为了创建一个迷宫。访客 观察员 指挥部 代理(用于网络游戏) 几乎所有的创作模式 想一想,“场景图。” 游戏与其他类型的应用程序并没

这个问题困扰了我很长时间。我一直想知道游戏开发者是如何解决某些类型中常见的问题或情况的


例如,如何执行典型角色扮演游戏(如BG或TES)的任务?或者,您将如何在第一人称射击中实现具有多种堆叠效果的武器(例如,DN3D的收缩枪或冷冻柜)?你将如何通过一个可能会导致多种不同结果的复杂决策树(如WC中的任务树)来实施多项选择选项?

如果你阅读《四人帮》,整个创作模式部分都是为了创建一个迷宫。

访客

观察员

指挥部

代理(用于网络游戏)

几乎所有的创作模式

想一想,“场景图。”


游戏与其他类型的应用程序并没有什么不同,至少不像人们想象的那样。我说这是一个专业的游戏开发人员,也是一个专业的非游戏开发人员:)

记住,这些不是通常的“设计模式”要解决的典型软件架构问题——它们是游戏设计问题,即对终端软件的一组需求。因此,典型的软件模式并不真正适用。因此,对于您所描述的类型,并没有真正的软件模式,因为在大多数情况下,在多个游戏中并没有一致的规范和要求。这些特性通常很大程度上取决于游戏设计,程序结构也随之产生。当然,在各种书籍中都会给出一些例子——例如,强烈推荐游戏编程Gems系列——但它们只是起点,您必须根据自己的具体需求进行定制

任务——可以重复吗?一个任务会“失败”吗?还是仍然不完整?它们是否包含多个阶段?在提供任务之前,是否有必须满足的标准?是否有需要更新的日志?最后是否有自动奖励?竣工条件是什么,如何以及何时进行检查?某些事件是由接受任务触发的,还是由任务完成触发的?玩家在一次任务中的进展有什么概念吗?有些任务是强制性的吗?任务是否以某种方式排序?根据游戏的设计,所有这些都会因游戏而异


现在,游戏程序员发现自己使用了很多技术和方法,例如嵌入脚本语言、使用2D哈希或分区的空间数据库、有限状态机等。,但是,这些只是通用工具,恰好能够很好地反映游戏开发人员面临的问题。

我想说,它们中的大多数都可以大量使用,具体取决于游戏的类型,有些可能比OHER更有用

如果我必须选择一些游戏设计中最有影响力的:

  • 观察者:大多数逻辑是基于事件和反应的
  • 责任链:在运行时改变行为(通电等)
  • 州:有明显的原因
  • 组合:例如,库存管理或场景图

我的拙见是,所有模式在游戏中都是有用的,但一般来说,最强大的模式使用是在开发过程中产生的,而不是预先针对特定目标


换句话说,模式是一种很好的语言。但是,将它们用作实现策略是很糟糕的,因为以这种方式使用它们往往会导致复杂、臃肿和缓慢的代码。

也许是社区维基?@Matti:当然没有那么多可能的答案。是的,实际上它们都不会被用于实践中!至少,可能不是为了制作迷宫:)设计模式是为了解决软件问题,而不是游戏设计问题。我们面临的一个挑战是,在游戏中,“设计师”的含义与其他软件行业中的含义大不相同,因此通常适合软件设计师的文献应该由软件人员而不是内容人员使用。以您的任务为例,一个明显的设计模式将发挥作用的地方是任务更新-在连接到玩家时,任务可能会作为观察者连接到玩家上的各种事件(如“我杀死了什么东西”事件或“我捡到了什么东西”事件)。如果你看看虚幻引擎中的数据块之类的东西,它们介于工厂、构建器和原型模式之间。(还有,FWIW,我在AAA标题的源代码中看到过GoF模式,名字中不包括Singleton)@kyoryu:这正是我要找的信息类型!Scenegraph也是一个很好的关键词。谢谢@Kylotan:+1提到“空间数据库”,这对我来说也是全新的。谢谢你的意见。:)是的,当然你可以(而且确实)在游戏中使用设计模式,但它们不是“特别有用”,只是“有用”。(值得考虑的是,我不会考虑使用观察器来处理任务事件)。由实现相同接口的其他节点组成的节点实际上就是教科书定义。更新答案以反映这一点