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

GMS2子敌人生成器无法独立运作:销毁异常问题求助

解决方案

问题核心是敌人不知道自己属于哪个生成器,导致销毁时触发了所有生成器的变量修改。要实现子生成器独立运作,关键是给每个敌人绑定对应的生成器实例ID,让敌人只通知自己的父生成器。

1. 生成动画对象时传递生成器ID

修改父生成器的Step事件代码,创建动画对象后给它添加记录生成器ID的变量:

// PARENT STEP EVENT
if(enemy_dead_count <= 0){
    sprite_index = sDestroyed_Ghost_Spawner;
    if(image_index >= 9 && image_index < 10){
        image_index = 9;
        instance_destroy(); // 动画播放完成后销毁当前生成器
    }
} else {
    while(spawn_ghost == 0){
        // 创建动画实例并记录生成器ID
        var _anim = instance_create_layer(x,y+32,"Player",oEnemy_spawner_animation);
        _anim.spawner_id = id;
        spawn_ghost += 1;
    }
}

2. 动画转敌人时传递生成器ID

修改动画对象的Step事件,转换为敌人时把生成器ID传递过去:

// animator step event
if image_xscale <= 1 {
    image_xscale += 0.008;
    image_yscale = image_xscale;
} else {
    image_xscale = 1;
    image_yscale = image_xscale;
    // 转换为敌人并传递生成器ID
    var _enemy = instance_change(oEnemy_ghost,true);
    _enemy.spawner_id = spawner_id;
}

3. 敌人销毁时只通知对应生成器

修改敌人父对象的销毁代码,通过绑定的生成器ID找到目标生成器,避免影响其他实例:

if(hp <= 0){
    var _spawner = spawner_id;
    instance_destroy(); // 先销毁敌人自身
    // 确保生成器还存在再修改变量
    if(instance_exists(_spawner)){
        _spawner.spawn_ghost = 0;
        _spawner.enemy_dead_count -= 1;
    }
}

关键说明

  • 每个生成器、动画、敌人实例都有独立的变量空间,通过id(实例唯一标识)绑定关系后,操作只会作用于目标实例。
  • 增加instance_exists(_spawner)判断是为了避免生成器已销毁时出现错误。

内容的提问来源于stack exchange,提问作者Julian Silvestri

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 20:40:24