布尔值未正确停止鼠标事件 as3



=)) 我遇到了一个简单的问题,我希望我的布尔值在用户找到正确的组合后变为 false(因此在找到正确的组合后,进一步单击卡片不会继续跟踪它们)调用此功能的代码将 boolean:podeJogarTrio 变为 true,并且函数工作正常。但是在我宣布它是假的之后,我仍然可以在删除卡片的 1 秒延迟(用于动画)期间继续点击卡片并翻转它们!任何想法??=))

function verlaranja()
{
    if(podeJogarTrio == true)
    {
        for(var u:int=0; u < 3; u++)
        {
            var mcLaranja:Laranja = new Laranja();
            mcLaranja.x = larguraTrio + (mcLaranja.width + 5) * (u % 3);
            mcLaranja.y = alturaTrio + (mcLaranja.height + 5) * (Math.floor(u/3));
            mcLaranja.gotoAndStop(u + 1);
            mcLaranja.buttonMode = true;
            mcLaranja.addEventListener(MouseEvent.CLICK, cliquelaranja);
            mcExplic.addChild(mcLaranja);
            trio.push(mcLaranja);
            function cliquelaranja(e:MouseEvent)
            { 
                e.currentTarget.nextFrame();
                var teste1:int = trio[0].currentFrame;
                var teste2:int = trio[1].currentFrame;
                var teste3:int = trio[2].currentFrame;
                if((teste1 == 3) && (teste2 == 3) && (teste3 == 3))
                {
                    podeJogarTrio = false;    // NOT WORKING PROPERLY!
                    intervalo = setInterval(removeLaranja, intervaloTrio);
                    function removeLaranja()
                    {
                        clearInterval(intervalo);
                        for(var k:int=0; k < 3; k++)
                        {
                            trio[k].removeEventListener(MouseEvent.CLICK, cliquelaranja);
                            mcExplic.removeChild(trio[k]);
                            trace(trio);
                            if(k == 2)
                            {
                                removeTrio();
                            }
                        }
                    }
                }
            }
        }
    }
}

关于避免嵌套函数和 setInterval(你应该查看计时器类)的评论都值得考虑。

您遇到的问题是,在执行间隔之前不会删除事件侦听器,因此,当在此期间单击时,附加到此侦听器的代码仍将运行。有几种方法可以解决此问题,但最简单的方法可能是将条件移动到事件侦听器函数:

function verlaranja()
{
    for(var u:int=0; u < 3; u++)
    {
        var mcLaranja:Laranja = new Laranja();
        mcLaranja.x = larguraTrio + (mcLaranja.width + 5) * (u % 3);
        mcLaranja.y = alturaTrio + (mcLaranja.height + 5) * (Math.floor(u/3));
        mcLaranja.gotoAndStop(u + 1);
        mcLaranja.buttonMode = true;
        mcLaranja.addEventListener(MouseEvent.CLICK, cliquelaranja);
        mcExplic.addChild(mcLaranja);
        trio.push(mcLaranja);
        function cliquelaranja(e:MouseEvent)
        {
            // I think you want to check your boolean here
            if (podeJogarTrio) 
            {
                e.currentTarget.nextFrame();
                var teste1:int = trio[0].currentFrame;
                var teste2:int = trio[1].currentFrame;
                var teste3:int = trio[2].currentFrame;
                if((teste1 == 3) && (teste2 == 3) && (teste3 == 3))
                {
                    podeJogarTrio = false;    // NOT WORKING PROPERLY!
                    intervalo = setInterval(removeLaranja, intervaloTrio);
                    function removeLaranja()
                    {
                        clearInterval(intervalo);
                        for(var k:int=0; k < 3; k++)
                        {
                            trio[k].removeEventListener(MouseEvent.CLICK, cliquelaranja);
                            mcExplic.removeChild(trio[k]);
                            trace(trio);
                            if(k == 2)
                            {
                                removeTrio();
                            }
                        }
                    }
                }
            }
        }
    }
}

最新更新