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

如何通过hitTestObject实现角色触碰Jelly前保持可移动状态?

实现角色碰撞Jelly前可移动的方案

核心逻辑很直白:用JellyHitted变量标记是否撞到Jelly,只有没撞到的时候,才允许角色响应移动按钮的操作,同时要让碰撞检测持续运行,实时更新这个状态。

1. 修改角色控制代码

给每个移动按钮的点击事件加状态判断,仅在未碰撞时执行移动逻辑:

up_btn.addEventListener(MouseEvent.CLICK, function(){
    if(!JellyHitted){ // 未碰撞时才允许向上移动
        character.y -= 10;
    }
})
down_btn.addEventListener(MouseEvent.CLICK, function(){
    if(!JellyHitted){
        character.y += 10;
    }
})
left_btn.addEventListener(MouseEvent.CLICK, function(){
    if(!JellyHitted){
        character.x += 10;
    }
})
right_btn.addEventListener(MouseEvent.CLICK, function(){
    if(!JellyHitted){
        character.x -= 10;
    }
})

2. 补全碰撞检测逻辑

把碰撞检测绑定到帧事件上,让程序持续检测碰撞状态,同时补全原代码未闭合的函数:

var JellyHitted:Boolean = false; // 初始默认未碰撞

// 绑定到帧事件,每一帧都检查一次碰撞状态
addEventListener(Event.ENTER_FRAME, hitJelly);

function hitJelly(e: Event):void {
    if (character.hitTestObject(Jelly1)) {
        JellyHitted = true;
        character.gotoAndStop(7);
        // 如果想碰撞后彻底禁用移动,可直接移除按钮监听:
        // up_btn.removeEventListener(MouseEvent.CLICK, 对应函数);
        if (character.electrocuted.currentFrame == 30) {
            character.gotoAndStop(1);
        }
    } else {
        JellyHitted = false;
    }
}

关键细节

  • 必须初始化JellyHitted为false,否则角色初始状态可能无法移动
  • 用ENTER_FRAME实时检测碰撞,能保证状态及时更新;如果不需要高频检测,也可以在每次点击移动按钮后调用一次hitJelly函数
  • 若碰撞后想彻底禁用移动,直接移除按钮的点击监听会比变量判断更彻底

内容的提问来源于stack exchange,提问作者Isaac Yeap Jie Ling

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 01:30:50