游戏编程实验

动机

我开始尝试在编写游戏代时尝试创建设计模式的银弹。我已经完成了大约四次迭代(主要用于学术作业),但我还不称它为银弹。也许现在只是一颗子弹。然而,我正在分享这一点,试图为那些与我分享动机的人创造一些牵引力。

我也想尝试创建比ECS更严格的东西。为了实现这一目标,我的目的是解决在处理gamedev代时遇到的三个问题:避免单例/引用?地狱,专注于支持设计人员的简单/快速引擎采用,以及通过提高效率来实现允许团队重用以前开发的系统。

规则

我想首先定义此实验成所需的五条规则:

组件只是数据。它们也是脚本或编辑在运行时必须访问和更改游戏玩法的唯一内容。系统处理数据。系统仅涉及组件数据和其他连接系统。运行期间不会发生崩溃?如果添加/删除/更新组件/系统。系统可以运行,也可以在沙盒/多线程环境中运行。游戏对象(或实体)仅用于将组件组合在一起。游戏事件缓冲区

第一个方面是最简单的,基本上是最容易理解的部分:事件。我们游戏中可能发生的一切都将被定义为一个事件,并将被视为使游戏模拟的移动部分。

当您开始计划游戏时,定义这些事件也是一个有力的第一步。你甚至可以在你的GDD中定义它们中的每一个。如何定义这些事件取决于你,但你可能只有在理解了系统和组件之后才能掌握它。

系统?

除了处理组件数据外,系统也是我们定义游戏事件的地方。让我们创建一个系统并称之为CharacterSystem。为了执行规则#3,我们必须确保如果我们撕掉这个系统,就不应该再改变游戏中角色的状态了。这就是我们在系统中定义与角色相关的事件的原因。但是,我们应该小心。在可能存在依赖关系的情况下执行诸如在游戏循环中移除系统之类的作很可能会使游戏崩溃,违反规则#3。这就是为什么事件基本上只是整数,其值只存在于缓冲区内。这将我们带到组件。

组件

您可能习惯于使用ECS等模式的组件或仅用于游戏引擎。但是,这些组件有点不同。他们最多只做两件事:

向设计人员或脚本公开属。存储来自系统或由系统使用的事件的缓冲区。

当您到达示例时,上面的第2点实际上是由EZS插件为您完成的,但重要的是要理解为什么存在这些缓冲区。

记住规则#1也很重要。这些组件不能包含任何逻辑。它们本来就是愚蠢的,而愚蠢有助于执行规则#2,#3和#4。

为了总结您对实验的理解,我们首先需要画一幅画。通过图片,我的意思是让我们使用我们目前所知的东西并创建一个小场景。然后我们将在一个游戏循环中可视化事件如何遍历缓冲区。

游戏事件的生命

对于我们的系统,我们将创建两个:

每个系统都有其组件:

当然我们的活动也应该存在于某个地方。我将保持简单并定义一个事件并将其称为 ToggleWeapon 。我们将它添加到 CharacterSystem 中,因为它与角色武器有关,如果该系统被删除/禁用,该事件不再存在:

记住我们的组件都有我们称之为事件的缓冲区。系统(如果已注册)使用它们来对事件的执行情况作出反应。在我们的例子中, KeyboardComponent 也将存储由 KeyboardSystem

触发的绑定,它将向其缓冲区添加一个事件。按下键时,我们仍然只有 ToggleWeapon 事件位于 KeyboardComponent 事件缓冲区中:< / p>

我们需要让事件进入动机

我开始尝试在编写游戏代时尝试创建设计模式的银弹。我已经完成了大约四次迭代(主要用于学术作业),但我还不称它为银弹。也许现在只是一颗子弹。然而,我正在分享这一点,试图为那些与我分享动机的人创造一些牵引力。

我也想尝试创建比ECS更严格的东西。为了实现这一目标,我的目的是解决在处理gamedev代时遇到的三个问题:避免单例/引用?地狱,专注于支持设计人员的简单/快速引擎采用,以及通过提高效率来实现允许团队重用以前开发的系统。

规则

我想首先定义此实验成所需的五条规则:

组件只是数据。它们也是脚本或编辑在运行时必须访问和更改游戏玩法的唯一内容。系统处理数据。系统仅涉及组件数据和其他连接系统。运行期间不会发生崩溃?如果添加/删除/更新组件/系统。系统可以运行,也可以在沙盒/多线程环境中运行。游戏对象(或实体)仅用于将组件组合在一起。游戏事件缓冲区

第一个方面是最简单的,基本上是最容易理解的部分:事件。我们游戏中可能发生的一切都将被定义为一个事件,并将被视为使游戏模拟的移动部分。

当您开始计划游戏时,定义这些事件也是一个有力的第一步。你甚至可以在你的GDD中定义它们中的每一个。如何定义这些事件取决于你,但你可能只有在理解了系统和组件之后才能掌握它。

系统?

除了处理组件数据外,系统也是我们定义游戏事件的地方。让我们创建一个系统并称之为CharacterSystem。为了执行规则#3,我们必须确保如果我们撕掉这个系统,就不应该再改变游戏中角色的状态了。这就是我们在系统中定义与角色相关的事件的原因。但是,我们应该小心。在可能存在依赖关系的情况下执行诸如在游戏循环中移除系统之类的作很可能会使游戏崩溃,违反规则#3。这就是为什么事件基本上只是整数,其值只存在于缓冲区内。这将我们带到组件。

组件

您可能习惯于使用ECS等模式的组件或仅用于游戏引擎。但是,这些组件有点不同。他们最多只做两件事:

向设计人员或脚本公开属。存储来自系统或由系统使用的事件的缓冲区。

当您到达示例时,上面的第2点实际上是由EZS插件为您完成的,但重要的是要理解为什么存在这些缓冲区。

记住规则#1也很重要。这些组件不能包含任何逻辑。它们本来就是愚蠢的,而愚蠢有助于执行规则#2,#3和#4。

为了总结您对实验的理解,我们首先需要画一幅画。通过图片,我的意思是让我们使用我们目前所知的东西并创建一个小场景。然后我们将在一个游戏循环中可视化事件如何遍历缓冲区。

游戏事件的生命

对于我们的系统,我们将创建两个:

每个系统都有其组件:

当然我们的活动也应该存在于某个地方。我将保持简单并定义一个事件并将其称为 ToggleWeapon 。我们将它添加到 CharacterSystem 中,因为它与角色武器有关,如果该系统被删除

/禁用,该事件不再存在:

记住我们的组件都有我们称之为事件的缓冲区。系统(如果已注册)使用它们来对事件的执行情况作出反应。在我们的例子中, KeyboardComponent 也将存储由 KeyboardSystem 触发的绑定,它将向其缓冲区添加一个事件。按下键时,我们仍然只有 ToggleWeapon 事件位于 KeyboardComponent 事件缓冲区中:< / p>

我们需要让事件进入

上一篇:拿起3DS- Whaddaya想想 - 告诉我们这里
下一篇:对于Taito,拱廊仍然是“最重要的焦点之一”

网友回应

欢迎扫描关注我们的微信公众平台!

欢迎扫描关注我们的微信公众平台!