You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取当前碰撞对象的实例ID?

解决GameMaker中获取当前碰撞实例的问题

你之前的写法存在误区:place_meeting仅用于检测是否存在碰撞,直接通过exampleobj.instance_id或访问exampleobj的变量时,默认会取该对象第一个创建的实例数据,无法指向当前碰撞的实例。以下是两种正确的实现方式:

方式一:使用instance_place获取单个碰撞实例

instance_place函数会返回指定位置与目标对象碰撞的实例ID(无碰撞则返回noone),通过这个返回值就能直接操作当前碰撞的实例:

// 获取当前位置碰撞到的exampleobj实例
var _collided_inst = instance_place(x, y, exampleobj);
if (_collided_inst != noone) {
    // 访问该实例的自定义变量
    var _target_val = _collided_inst.your_custom_variable;
    // 执行你的业务逻辑
    show_message("当前碰撞实例的变量值:" + string(_target_val));
}

方式二:使用with语句处理多个碰撞实例

如果需要处理同时碰撞到的多个exampleobj实例,用with遍历对象下的所有实例,再逐个检测碰撞:

with (exampleobj) {
    // other指代调用with的当前对象
    if (place_meeting(other.x, other.y, id)) {
        // 这里的id就是当前碰撞的exampleobj实例
        var _inst_val = this.your_custom_variable;
        // 可以通过other触发调用对象的逻辑
        other.handle_collision(_inst_val);
    }
}

核心注意点:永远不要直接通过对象名访问实例变量(比如exampleobj.your_custom_variable),这种写法只会返回该对象第一个创建实例的变量值,必须通过具体的实例ID来访问对应实例的数据。

内容的提问来源于stack exchange,提问作者Fusion Cow

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 15:40:37