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

GameMaker Studio:炸弹爆炸触发敌人销毁动画的实现问题

解决方案:爆炸范围敌人检测与销毁优化

核心问题分析

  1. instance_place 仅能返回单个碰撞实例,无法批量检测爆炸范围内的所有敌人
  2. 依赖碰撞盒的检测逻辑(instance_place)会和半径判断冲突,导致边缘敌人漏检
  3. 未对敌人的死亡状态做标记,可能导致动画触发逻辑被其他代码覆盖

优化代码实现

替换炸弹 alarm[0] 事件中的代码为以下版本:

// 生成爆炸特效
instance_create_layer(x, y, "Effects", obj_Explosion);

// 定义爆炸半径
var _explosionRadius = 64;

// 遍历所有敌人实例,检测是否在爆炸范围内
with (obj_Enemy) {
    // 用point_distance精准判断是否在爆炸半径内
    if (point_distance(other.x, other.y, x, y) <= _explosionRadius) {
        // 标记敌人进入死亡状态(避免重复触发动画)
        is_dying = true;
        // 切换到销毁动画并重置帧
        sprite_index = spr_enemy_destroyed;
        image_index = 0;
        // 设置延迟移除的计时器
        alarm[1] = room_speed * 0.5;
        // 停止敌人的移动/碰撞等逻辑(可选,根据你的游戏调整)
        speed = 0;
        solid = false;
    }
}

敌人对象的补充设置

  1. 在 obj_Enemy 的 Create 事件 中添加状态变量:
is_dying = false;
  1. 在 obj_Enemy 的 Alarm[1] 事件 中添加移除逻辑:
// 确保只有死亡状态的敌人才会被移除
if (is_dying) {
    instance_destroy();
}

关键优化点说明

  • 使用 with (obj_Enemy) 遍历所有敌人实例,一次性处理范围内的所有目标,解决单实例检测的问题
  • 用 point_distance 直接计算距离,替代碰撞盒检测+二次距离判断,避免边缘漏检
  • 新增 is_dying 状态标记,防止敌人被多次触发销毁动画,也能避免其他逻辑(比如敌人AI)干扰死亡流程
  • 可选的 speed=0 和 solid=false 可以让敌人在播放动画时停止交互,提升体验

内容的提问来源于stack exchange,提问作者David Weinstein

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 19:30:17