=)) 我遇到了一个简单的问题,我希望我的布尔值在用户找到正确的组合后变为 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();
}
}
}
}
}
}
}
}