【问题标题】:How do I make action for certain instances of object?如何对某些对象实例执行操作?
【发布时间】:2016-10-25 03:41:15
【问题描述】:

我一般不想对对象进行操作 例如,我有 8 个实例 (0,1,2,3,4,5,6,7) 例如,我只需要对 2 、 5 和 7 进行操作 怎么样??

【问题讨论】:

    标签: html construct-2


    【解决方案1】:

    对于来自软件工程背景的 Construct 2,我真的很困惑。

    选择要影响的 Sprite 实例有点像过滤数据库。您从列表中的所有实例开始,然后使用条件将它们过滤掉。如果可能,Construct 2 会自动猜测您想要哪个实例。 (就像你刚刚在 EnemySpawn 生成了 Enemy,它会知道你的下一个引用 Enemy 只是最后一个创建的)。

    这在大多数情况下都有效,但您可以选择一组具有以下几个条件的对象:

    比较实例变量 比较对象实例变量之一的当前值。

    是否设置了布尔实例变量 测试对象的布尔实例变量之一是否设置为 true。 (反转条件以测试是否为假。)

    按唯一 ID (UID) 选择 选择与给定唯一 ID (UID) 编号匹配的实例。

    根据我的经验,添加实例变量并将其设置为跟踪 Sprite 的子集或 sprite 的状态是将操作限制为特定 sprite 组的最简洁的方法。

    另请参阅 Scirra 手册中的 Object Expressions

    您可以添加从 0 开始的对象索引以从不同的对象实例中获取表达式。例如 Sprite(0).X 获取第一个 Sprite 实例的 X 位置,Sprite(1).X 获取第二个实例的 X 位置。有关详细信息,请参阅常用功能中的索引 ID (IID)。您还可以为索引传递另一个表达式。负数从相反的一端开始,所以 Sprite(-1).X 获取最后一个 Sprite 的 X 位置。

    这些不是“特定的”对象 ID(Construct 2 称它们为索引 ID 或 IID),而是按创建顺序引用该类型的所有对象。

    所以:
    Enemy(0) 是第一个
    Enemy(-1) 是最近的
    Enemy(5) 是第 6 个创建的敌人,忽略被摧毁的 Sprite(见下文)。

    但你必须记住,如果你销毁一个 IID 为 3 的对象,那么它之后的所有对象都将在列表中移动,并且它们的 IID 将减少 1。 (类似于 LinkedList 数据结构)

    如果你销毁实例 D,其他实例就会转移

    Instance |A|B|C|D|E|F|     -->     |A|B|C|E|F| 
    IID      |0|1|2|3|4|5|     -->     |0|1|2|3|4|
    

    希望其中一种方法可以帮助您获得所需!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-08-06
      • 2023-01-25
      • 1970-01-01
      • 2015-08-02
      • 1970-01-01
      • 2016-01-21
      • 2023-03-24
      相关资源
      最近更新 更多