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

AS3中hitTestObject函数异常:命中时goodmc与sadmc同时显示

问题排查方向

1. 函数重复调用触发二次分支

碰撞触发后你执行了removeChild(ball3),将ball3从显示列表移除。如果ball3test()在这次触发后再次被调用,此时ball3.hitTestObject(ball1_t)会返回false(ball3已不在舞台),代码会进入else分支把sadmc.alpha设为1,导致两个MC同时显示。

  • 检查ball3test()的调用时机:比如是否绑定了多次事件(如帧循环、重复点击事件),或者ssdone()函数内部又触发了ball3test()执行。

2. ssdone()函数存在异常逻辑

排查ssdone()内部代码,是否存在不管分支结果,都强制将sadmc.alpha设为1的逻辑——这会直接导致碰撞触发时两个MC同时显示。

3. 临时验证方案

在ball3test()开头加日志输出,或临时注释removeChild(ball3),验证问题根源:

function ball3test()
{
    trace("ball3test执行,碰撞结果:" + ball3.hitTestObject(ball1_t)); // 查看执行次数与碰撞结果
    if (ball3.hitTestObject(ball1_t))
    {
        goodmc.alpha = 1;
        // removeChild(ball3); // 临时注释该行
        sw = sw + 1;
        ball3t.alpha = 1;
        setTimeout(hidhap, 1000);
        ss = ss + 1;
        ssdone();
    }
    else
    {
        sadmc.alpha = 1;
        ball3.x = ball3X;
        ball3.y = ball3Y;
        setTimeout(hidsad, 1000);
        ssdone();
    }
}

如果注释removeChild(ball3)后,碰撞触发时sadmc不再显示,即可确认是函数重复调用导致的问题。

内容的提问来源于stack exchange,提问作者Ayman Abozied

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 07:55:56