容器

414次阅读
没有评论

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

容器(Containers)

简介

在游戏开发中,容器是一种高级特性,用于构建复合对象。复合对象是指由多个对象组成的游戏元素。例如,策略游戏中的坦克可能由两个部分组成:坦克底座的精灵和坦克炮塔的不同精灵。这允许它们独立旋转。将它们都添加到一个容器中,然后允许事件将这些对象视为一个整体,因为它们总是一起选择的。

层次结构是另一个用于构建复合对象的特性(请参阅布局视图中的设置层次结构)。容器通常适用于在事件表中选择对象组,而层次结构通常适用于使对象一起移动和旋转。这两个特性也可以一起使用。
熟悉事件的工作方式对于理解容器的工作方式至关重要。

创建容器

要将对象添加到容器中,请选择要包含在容器中的一个对象,然后单击其属性中的“创建”链接(显示在“容器”类别旁边,标签为“无容器”)。将打开一个对话框,允许你选择要添加到容器的对象。

通过再次单击“容器”类别中的“添加对象”链接,可以将更多对象添加到容器中。通过单击“删除”链接可以移除对象。

容器的作用

将对象放入容器会产生以下效果:

  • 如果容器中的一个对象被创建,那么它所在的容器中的其他所有对象也会自动创建。
  • 如果容器中的一个对象被销毁,那么与之关联的容器中的其他所有对象也会被销毁。
  • 如果条件选择一个容器中的对象,那么与其关联的容器中的其他所有对象也会被选择。
    前两点基本上保证了容器中所有对象具有相同数量的实例。换句话说,容器是作为一个整体创建和销毁的。使用坦克底座和炮塔容器示例,不可能只创建一个坦克底座而不自动获得一个新的炮塔。

第三点是容器的主要目的。在事件中,容器也作为一个整体被选择。这使得事件将容器视为一个对象。例如,如果条件选择一个坦克底座实例,它也会自动控制所选底座的关联炮塔。

示例

在以下事件中,假设 TankBase 和 TankTurret 都在一个容器中。
容器

创建容器的事件

在上面的事件中,由于 TankTurret 与 TankBase 在同一个容器中,因此也会创建一个 TankTurret 实例。可能还需要添加一个动作来设置 TankTurret 的位置,使其出现在底座上。
容器

销毁容器的事件

在这个事件中,由于 TankBase 在同一个容器中,关联的 TankTurret 实例也会被销毁。
容器

用容器进行选择的事件

在这个事件中,当子弹击中坦克底座时,只有其关联的炮塔会闪烁。如果对象不在容器中,根据事件的工作规则(由于没有在条件中引用炮塔,动作适用于所有炮塔),游戏中的所有炮塔都会闪烁。然而,由于对象在容器中,当被子弹击中的 TankBase 被选中时,其关联的炮塔也被选中。这使得事件按预期工作,并且事件将两个对象视为一个整体。这是容器的核心,对于一些用途(如策略游戏),将会有大量的事件利用这种类型的选择来确保对象作为单元工作,不会意外影响其他实例。

在布局中放置容器对象

在布局视图中,可以单独创建容器中的实例。这似乎违反了“容器的作用”下的规则 1 和 2,因为容器中的对象必须始终一起创建和销毁。然而,编辑器不强制执行此操作。相反,任何缺失的对象都会在布局开始时自动创建。最好确保你创建了足够的对象,以便你可以从布局视图编辑对象的位置、实例变量和其他属性。

在布局视图中使用容器

在布局视图中,当你高亮显示容器中的实例时,同一容器中的其他实例会以黄色高亮显示,以帮助你识别哪些实例是分组在一起的。

你还可以更改选择模式属性为以下之一:

  • 正常:容器中的实例像普通实例一样单独选择。
  • 全部:每当你选择一个实例时,容器中的所有实例都会一起选择。这就像每次点击它们中的一个时,总是多选容器中的每个实例一样。
  • 包裹:还选择了容器中的所有实例,然后将选择包裹起来,使它们作为一个整体拉伸和旋转。这意味着你可以将容器视为一个对象。有关更多信息,请参阅布局视图中的选择包裹。
    你可以通过按住并选择实例来绕过选择模式。这将允许你仅选择该实例,即使选择模式为“全部”或“包裹”。这有助于你更改容器,例如添加或删除另一种类型的对象到容器中。

数据存储对象在容器中

可以将数据存储对象(如数组和字典)与另一个对象一起添加到容器中。尽管这些对象是不可见的,但每个容器仍会创建一个单独的对象实例。这允许你为每个对象实例拥有一个专用的数组或字典。这可能是高级替代实例变量的有用方法,例如如果需要非常多的变量,或者如果变量需要动态添加和删除。

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