instance_change

您可以使用此函数将一个对象的一个​​实例更改为另一个对象的另一个实例,并在执行此操作时决定是否执行初始实例的销毁和清理事件以及新实例的创建事件。

通过这种方式,您可以 (例如) 将炸弹更改为爆炸 - 在这种情况下,"perf" 参数可能为真,因为您希望炸弹执行其销毁事件和清理事件,以及爆炸来执行其创建事件 - 或者您可以将您的玩家角色更改为不同的角色 - 在这种情况下,"perf" 参数可能为假,因为您不希望实例执行其创建和销毁 / 清理事件,因此它保持相同的属性。

值得注意的是,更改实例意味着在下一步之前您不应对该实例执行进一步的操作,特别是尝试访问变量等,因为这将导致错误。基本上,您更改了实例,但直到当前步骤结束时它实际上才可用,因此直接访问它包含的任何变量 (例如,调用 obj_Changed.x) 将不起作用。

警告 更改启用物理的实例时,其物理属性 将不会 转移到要更改的新实例。因此,您应该有适当的代码来将当前实例的物理状态 " 转移 " 到新实例,或者在其创建事件或对象编辑器中定义新实例的物理属性。因此,不建议将此函数与启用物理功能的实例一起使用,而是结合使用函数 instance_destroy()instance_create_layer()

 

语法:

instance_change(obj, perf);

参数类型描述
objObject Asset调用对象将更改为的新对象。
perfBoolean是否执行创建和销毁事件 (true) 或不执行 (false)。

 

返回:

N/A

 

例子:

if (keyboard_check(vk_enter))
{
    instance_change(obj_Player_Swimming, false);
    exit;
}

上面的代码会将调用实例更改为 "obj_Player_Swimming" 实例,而不会在用户按 "Enter" 键时执行原始实例销毁事件或新实例创建事件,完成后退出代码块。