AS3 尝试使用 if 语句创建带有 hitTestObject 的函数

AS3 tryin to make a function with hitTestObject using if statement

提问人:Ayman Abozied 提问时间:8/18/2023 最后编辑:OrganisAyman Abozied 更新时间:8/19/2023 访问量:25

问:

我有一个带代码的函数

function ball3test()
{
    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();
    }
}

现在当我测试它时,如果 ball3.hitTestObject(ball1_t) 好的 mc 和悲伤的 mc 一起显示..这让我发疯,我不知道怎么了 当命中测试发生时,goodmc 和 sadmc 可见的 togeher,它应该只是 goodmc,而不是两者兼而有之 但是,当命中测试未发生时,SADMC 仅显示

ActionScript-3 Flash 闪光灯-CS6

评论

0赞 Ernestyno 8/19/2023
你打了多少次电话?也许一次是 sadmc,另一次是 goodmc。您也可以添加 : .反之亦然ball3testball3.hitTestObject(ball1_t)sadmc.alpha = 0;

答:

1赞 Organis 8/19/2023 #1

所以,我编辑了你的代码,使其具有可读性。始终这样做,格式化您的代码并正确对齐它:它将那里发生的事情的可见性和透明度提高了十倍。

然后,你问题的本质。我在提供的代码片段中没有看到任何错误,但我怀疑这个函数被同时调用了几次,这就是为什么你认为它是条件子句下两个语句都执行的令人兴奋的案例。

我建议将调试跟踪添加到您的代码中:

import flash.utils.getTimer;

function ball3test()
{
    trace("A", getTimer());
    
    if (ball3.hitTestObject(ball1_t))
    {
        goodmc.alpha = 1;
        removeChild(ball3);
        sw = sw + 1;
        ball3t.alpha = 1;
        setTimeout(hidhap, 1000);
        ss = ss + 1;
        ssdone();
        
        trace("B", getTimer());
    }
    else
    {
        sadmc.alpha = 1;
        ball3.x = ball3X;
        ball3.y = ball3Y;
        setTimeout(hidsad, 1000);
        ssdone();
        
        trace("C", getTimer());
    }
}

然后,在执行时,您可能会看到类似以下内容:

A xxx
B xxy
A zzz
C zzq

如果我是对的,那么你需要弄清楚,为什么你的函数在它已经被调用之后被调用(这可能是设计使然),然后寻求防止它的方法。