instance_destroy


描述

当你希望 “销毁” 实例时,可以调用此函数,通常触发销毁事件和清理事件。这将从房间中删除它,直到重新启动房间(除非房间是保持的)。调用没有参数的函数只会销毁当前在范围内的实例并运行代码,但是你可以提供可选的 “id” 参数并使用实例 ID 值来定位特定实例,或者你可以使用 object_index 定位特定物体的所有实例。比如:

instance_destroy(other); // 销毁碰撞事件中的其他实例
instance_destroy(obj_Bullet); // 销毁物体 “obj_Bullet” 的所有实例

第二个 可选 标志允许你 “关闭” 正在销毁的实例的销毁事件。默认情况下,销毁事件将 总是 执行,但如果将此标志设置为 false,则可以使实例自行销毁并跳过执行该事件。

重要! 这将跳过销毁事件,但仍会调用清理事件。


值得注意的是,当你销毁一个实例时,在调用销毁的代码或操作之后,立即 调用销毁事件。其次,虽然销毁事件已经执行,但是实例 并没有立即从游戏中删除,它将继续执行当前事件中包含的代码。只有当当前事件结束时,它才会从游戏中删除。

所以,如果你有,例如,这段代码:

if hp <= 0 instance_destroy();
score += 10;

即使 instance_destroy 函数已被调用,变量 “score” 仍将增加,该实例最终将在事件结束时从游戏中移除。小心这一点,好像你(例如)为实例创建了一个动态资源,比如数据结构,然后在销毁事件中销毁了该资源,如果在销毁函数或操作执行之后有任何对它的引用,那么当销毁事件将其从游戏中删除时,你将得到一个 “未知资源” 错误。


语法:

instance_destroy([id, execute_event_flag]);


参数:

参数 描述
id 要销毁的实例 ID 或 object_index(可选,默认为调用实例)
execute_event_flag 设置为 truefalse 执行销毁事件与否(可选,默认为 true


返回:

N/A(无返回值)


例如:

if bbox_right < 0 || bbox_left > room_width || bbox_bottom < 0 || bbox_top > room_height
    {
    instance_destroy(id, false);
    }

如果实例在房间范围之外,上面的代码将销毁运行代码的实例而不调用销毁事件。