事件如何工作

65次阅读
没有评论

共计 2512 个字符,预计需要花费 7 分钟才能阅读完成。

如何理解事件工作机制

如果你对 Construct 的事件还不熟悉,本节将概述其工作原理。这对初学者来说是必读内容!深入理解事件的工作原理,你将能够制作出更好、更可靠的游戏。

要了解如何添加和编辑事件,请参阅事件表单视图。

事件设计得易于阅读,直观上“就是有效”。然而,它们有特定、明确定义的工作方式,这里会进行描述。

事件通过筛选满足某些条件的特定实例来工作。然后仅对这些实例执行动作。例如,考虑以下事件:
事件如何工作

一个简单的碰撞事件

在此示例中,当子弹与怪物发生碰撞时,事件条件得到满足。在游戏内发生碰撞的子弹和怪物的特定实例被事件“选中”。动作只对“选中”的实例运行。如果布局中有其他子弹和怪物的实例,它们不会受到减 1 健康值和销毁动作的影响。如果每颗子弹都能伤害每个怪物,那么制作好游戏将非常困难!

另一种思考事件的方式是:“如果所有条件都满足,则对满足条件的实例执行动作”。

多个条件

向事件添加更多条件可以逐步筛选要对其执行动作的实例。例如:
事件如何工作

一个带有两个条件的事件

此事件按如下方式运行:

  • 首先挑选屏幕上的所有怪物。
  • 然后,从这些在屏幕上的怪物中,减少到那些健康值少于 5 的怪物。
  • 动作使所有既在屏幕上且健康值少于 5 的怪物直视玩家。不在屏幕上或健康值达到 5 或更多的怪物不受影响。
    因此,使用多个条件,你可以仅对满足几个标准的实例执行动作。来自编程语言或其他工具的用户可能会认出这是逻辑“AND”。事件的所有条件都必须满足才能执行动作。如果没有怪物在屏幕上,或者在屏幕上的怪物都没有少于 5 的健康值,那么动作根本不会执行。

未引用的对象

请看下面的事件:
事件如何工作

一个对未在条件中使用的对象执行动作的事件

如果用户按下空格键并且玩家的 PowerupEnabled 标志被设置,则执行动作 Monster: Destroy。注意,这个事件没有筛选或选择怪物的任何条件。在这种情况下,所有怪物实例都被销毁。换句话说,如果事件没有在其条件中引用对象,则动作适用于该对象的所有实例。

将条件视为从所有实例开始挑选,并从那里逐步过滤。如果没有条件,仍然挑选了所有实例,因此动作影响它们全部。

事件间挑选重置

一个事件结束后,下一个事件从头开始。其条件将再次从所有实例开始挑选。

另一方面,子事件(显示为缩进)从其父事件停止的地方继续。子事件将进一步筛选之前事件留下的实例。如果一个事件有两个子事件,它们都从父事件留下的相同实例集中挑选 – 第一个子事件不影响第二个子事件。换句话说,同一缩进级别的事件总是从同一组实例中挑选,较低缩进级别的事件总是处理上面传递下来的实例。

系统对象

在 Construct 中,系统对象代表内置功能。它没有实例。这意味着大多数系统条件不挑选任何实例:它们要么为真,要么为假。如果它们为假,则事件停止运行,否则事件继续运行,而不改变所选实例。不过,也有例外:如果系统条件使用对象,如随机选取实例,那会影响所选对象。

系统动作不对任何所选对象执行:它们只是在满足事件所有条件的情况下运行。

事件自上而下运行

事件的顺序很重要。每个事件每 tick(大多数计算机上约每秒 60 次)检查一次,并且在事件表单中从上到下运行。屏幕在每个事件运行后绘制一次,然后过程重新开始。这意味着,如果一个事件做了某事,而下一个事件撤销了它,你永远不会看到发生了什么。

在事件内部也是如此:条件从上到下检查,动作从上到下运行。

然而,触发器是个例外。参见前面示例中键盘:按下空格键旁边的绿色箭头:
事件如何工作

具有触发条件的事件

这表明事件是被触发的。这个事件不是每 tick 运行一次,而是在实际发生某事时简单运行(或“触发”)。在这种情况下,当用户按下键盘上的空格键时,事件运行。它在任何其他时间都不会被检查。由于触发器在实际事件发生时运行,它们不像其他事件那样按从上到下的顺序检查。这意味着触发器与其他事件的相对顺序不重要(除了同一类型的其他触发器,因为触发器仍然会从上到下触发)。

一个事件中只能有一个触发器,因为两个触发器不能同时触发。但是,可以在“或”块中放置多个触发器(见下一节)。

逻辑或(Or)块

如前所述,所有条件都必须满足才能运行事件。这被称为“逻辑与”,因为“条件 1 和 条件 2 和 条件 3 …”必须为真。然而,你可以更改事件以在任何一个条件为真时运行。这被称为“逻辑或”,因为如果“条件 1 或 条件 2 或 条件 3 …”为真,则事件将运行。

通常的块作为“与”块工作。要创建一个“或”块,右键单击该块并选择“制作或块”。然后它将显示每个条件之间的 – 或 -,如下所示。

Construct 中的一个“或”块事件
请注意,由于“或”块在任何一个条件为真时运行,即使某些条件为假且未选择任何实例,事件仍可能运行。在这种情况下,操作仍将运行,但对于没有选择实例的任何对象,可能会选择零个实例。如果对没有选择实例的对象执行任何操作,则什么也不会发生。

还要注意,通常你只能在一个事件中放置一个触发器,但你可以在“或”块中放置多个触发器,并且如果任何触发器运行,则事件将运行。

通过使用子事件,你可以组合块类型。这允许你构建更高级的逻辑,例如一个“或”块后跟着一个“与”块。

循环条件
有些事件会循环,这意味着它们重复多次。注意下面示例中的绿色循环箭头以指示这一点。

一个循环事件
这意味着当布局开始时,Create object 操作重复 10 次。最终结果是在启动时在布局的随机位置创建了 10 个怪物。

在 Repeat 条件之后还可以有更多条件。这些也在每次重复时进行测试,并且必须在操作运行时为真。在一个事件中甚至可以有多个循环,但这很少见。

家族和容器
请注意,只有付费计划的家族才会完全独立于家族中的任何对象类型选择它们的实例。有关详细信息,请参阅手册条目中的“在事件中拾取家族”。

容器是也可以使一组实例始终一起被选中的高级功能。有关详细信息,请参阅关于容器的手册条目。

总结
使用此事件系统,可以快速轻松地为游戏创建复杂的逻辑。这是脚本或编程语言的一个非常强大的替代方案,但对非技术人员来说使用起来容易得多。

尽管本节描述了事件系统的基本部分,但它仍未涵盖所有内容。本手册的其余部分涵盖了您可以在事件中使用的更多功能。参考部分还涵盖了 Construct 中的所有条件、操作和表达式。

正文完
 0
评论(没有评论)