家族

73次阅读
没有评论

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

家族(Families)

在 Construct 中,家族是对象类型的组。一个家族中的所有对象类型必须来自同一个插件,例如所有 Sprite 对象(而不是 Sprite 和 Tiled Background 对象的混合)。

家族可以帮助你避免重复事件。例如,与其为 Enemy1、Enemy2 和 Enemy3 对象设置相同的事件,不如将它们全部添加到名为 Enemies 的家族中,并为该家族制作一次事件。然后,这些事件会自动应用于家族中的所有对象类型。

Construct 中的 Families 示例展示了这一优势。有七种敌人,当激光击中它们时都需要被摧毁。没有家族的情况下,需要七个单独的事件,如下所示:
家族
使用家族,所有七个事件都可以用单个事件替换:
家族
这使得创建和维护许多需要以类似方式工作的对象的项目变得更加容易。

如何创建家族

在项目栏中右键单击“Families”文件夹并选择“添加家族”。将出现“编辑家族”对话框。
家族

编辑家族对话框

左侧的对象是项目中可以添加到家族的对象。右侧的对象已经是家族中的对象。双击一个对象将其转移到另一侧。通过按住并单击多个对象,然后单击中间的按钮之一来转移它们,可以选择多个对象。

完成后,单击“确定”,家族将出现在项目栏中。它还可以展开以显示家族中的所有对象。通过右键单击它们并从菜单中选择选项(如从家族中移除或编辑家族),可以编辑家族和家族中的对象。

对象可以添加到多个家族中。对象的所有家族的事件都将应用于该对象。

家族实例变量

通过右键单击项目栏中的家族名称并选择“家族实例变量”,还可以将实例变量添加到整个家族中。

如果你给一个家族添加了一个实例变量,那么家族中的所有对象类型都会继承这个实例变量。例如,在上面的示例中给 Enemies 家族添加 health 实例变量将意味着 BladeEnemy、BugEnemy、CrescentEnemy、FighterEnemy、SaucerEnemy、ScytheEnemy 和 SlicerEnemy 都获得了一个 health 实例变量。它还将在编辑器中与每个对象自己的实例变量一起出现。然而,在事件表视图中,家族只会显示其自身的实例变量(直接添加到家族的实例变量)。这意味着任何你想在家族的事件中使用的实例变量都必须添加到家族中,而不是添加到家族中的对象上。

如果一个对象类型属于多个家族,它将继承每个家族的实例变量。

家族行为

通过右键单击项目栏中的家族名称并选择“家族行为”,还可以将行为添加到整个家族中。

与家族实例变量一样,如果你给一个家族添加了一个行为,那么家族中的所有对象类型都会继承这个行为。行为将出现在家族本身及其所有对象中的事件里。例如,将 Bullet 行为添加到名为 Bullets 的家族意味着 bullet 的 Set speed 操作可用于家族中的每个对象以及家族本身。

如果一个对象类型属于多个家族,它将继承每个家族的行为。

家族效果

通过右键单击项目栏中的家族名称并选择“家族效果”,还可以将效果添加到整个家族中。

与家族实例变量和行为一样,如果你给一个家族添加了一个效果,那么家族中的所有对象类型都会继承这个效果。这对于快速应用效果到多种不同的对象类型非常有用。

如果一个对象类型属于多个家族,它将继承每个家族的效果。

在事件中选择家族

在事件表中独立于家族中的对象类型选择家族实例。例如,考虑由 SpriteA 和 SpriteB 组成的 Family1。针对 Family1 的条件永远不会影响选择哪些 SpriteA 和 SpriteB 实例。它只会在选择运行 Family1 的操作时影响哪些实例受到影响。同样,选择 SpriteA 和 SpriteB 实例的条件也绝不会影响到 Family1 中选择的实例。换句话说,在事件表中,家族被视为一种完全独立的对象类型,只是恰好拥有来自其他对象类型的实例。如果你需要一个事件从同一对象类型中挑选两个单独的实例列表,这可以被利用。

升级普通对象为家族

如果你做了很多事件却忘记使用家族并想替换它们,可以使用“替换对象”功能来节省你重做每个事件的功夫。过程在教程“如何将对象升级为家族”中有描述。

总结

家族是一个非常强大的功能,对于帮助保持大型项目的简单性至关重要。添加到家族的实例变量和行为会被家族中的每个对象继承,这使得可以轻松地将复杂的逻辑应用于许多对象类型。


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