Actionscript 事件侦听器调用了错误的函数

Actionscript 事件侦听器调用了错误的函数,actionscript,audio,Actionscript,Audio,我需要帮助在行动脚本3.0代码。我开发了一个射击游戏。问题是我有一个按钮sound\u btn,用户需要点击它来播放声音。该按钮具有功能SoundButton,可播放用户需要拍摄的字母字符(即舞台上的5个不同按钮“letter1、2、3…等”)的声音。如果用户拍摄了正确答案的图片,他/她将得分。当用户按下按钮时,如果按钮正确,它将进入右\u应答功能,如果按钮错误,它将进入错误\u应答功能。但不幸的是,射击目标,无论是对是错,都指向正确答案函数,我找不到错误。我用trace来知道I的值,似乎我生成

我需要帮助在行动脚本3.0代码。我开发了一个射击游戏。问题是我有一个按钮
sound\u btn
,用户需要点击它来播放声音。该按钮具有功能
SoundButton
,可播放用户需要拍摄的字母字符(即舞台上的5个不同按钮“letter1、2、3…等”)的声音。如果用户拍摄了正确答案的图片,他/她将得分。当用户按下按钮时,如果按钮正确,它将进入右
\u应答
功能,如果按钮错误,它将进入错误
\u应答
功能。但不幸的是,射击目标,无论是对是错,都指向正确答案函数,我找不到错误。我用trace来知道I的值,似乎我生成了twic,我认为函数运行了两次。我真的不知道答案,请帮助我

    sound_btn.addEventListener(MouseEvent.CLICK, SoundButton);
    function SoundButton(evt:MouseEvent): void
    { //to hide the right marks
    right.visible=false;
 right2.visible=false;
 right3.visible=false;
 right4.visible=false;
 right5.visible=false;
 trace(i);

     if (i==0)
     { 

     myChannel = mysound.play();

    letter1.addEventListener(MouseEvent.CLICK, Right_Answer);
letter2.addEventListener(MouseEvent.CLICK, Wrong_Answer);
letter4.addEventListener(MouseEvent.CLICK, Wrong_Answer);
letter5.addEventListener(MouseEvent.CLICK, Wrong_Answer);
letter3.addEventListener(MouseEvent.CLICK, Wrong_Answer);


}

else if (i==1) 
     {

     myChannel1 = mysound1.play();

     letter1.addEventListener(MouseEvent.CLICK, Wrong_Answer);
letter2.addEventListener(MouseEvent.CLICK, Right_Answer);
letter4.addEventListener(MouseEvent.CLICK, Wrong_Answer);
letter5.addEventListener(MouseEvent.CLICK, Wrong_Answer);
letter3.addEventListener(MouseEvent.CLICK, Wrong_Answer);

}

else if (i==2)
{

    myChannel2 = mysound2.play();

    letter1.addEventListener(MouseEvent.CLICK, Wrong_Answer);
letter2.addEventListener(MouseEvent.CLICK, Wrong_Answer);
letter4.addEventListener(MouseEvent.CLICK, Right_Answer);
letter5.addEventListener(MouseEvent.CLICK, Wrong_Answer);
letter3.addEventListener(MouseEvent.CLICK, Wrong_Answer);

}

else if (i==3)
{

    myChannel3 = mysound3.play();

    letter1.addEventListener(MouseEvent.CLICK, Wrong_Answer);
letter2.addEventListener(MouseEvent.CLICK, Wrong_Answer);
letter4.addEventListener(MouseEvent.CLICK, Wrong_Answer);
letter5.addEventListener(MouseEvent.CLICK, Wrong_Answer);
letter3.addEventListener(MouseEvent.CLICK, Right_Answer);

}

else if(i==4)
{

    myChannel4 = mysound4.play();

    letter1.addEventListener(MouseEvent.CLICK, Wrong_Answer);
letter2.addEventListener(MouseEvent.CLICK, Wrong_Answer);
letter4.addEventListener(MouseEvent.CLICK, Wrong_Answer);
letter5.addEventListener(MouseEvent.CLICK, Right_Answer);
letter3.addEventListener(MouseEvent.CLICK, Wrong_Answer);


} 
    }
    function Wrong_Answer(event:MouseEvent)
    {
if (i==0){
 right.visible=true;
 i++;
 }
 else if (i==1){
     right2.visible=true;
     i++;
     }
 else if (i==2){
     right5.visible=true;
     i++;
     }
 else if (i==3){
     right3.visible=true;
     i++;
     }
 else if (i==4)
 {
     right4.visible=true;
     i++;

 }

 // move to next frame when the game is finish

     if (i>4)
     {
      nextFrame();
      }

  return i;

  //remove the event 
  letter1.removeEventListener(MouseEvent.CLICK, Wrong_Answer);
letter2.removeEventListener(MouseEvent.CLICK, Wrong_Answer);
letter3.removeEventListener(MouseEvent.CLICK, Wrong_Answer);
letter4.removeEventListener(MouseEvent.CLICK, Wrong_Answer);
letter5.removeEventListener(MouseEvent.CLICK, Wrong_Answer);



    }
    //show the right answer

    function Right_Answer(event:MouseEvent)
    {

 //for the scoring 
 score=score+1;
 score_show.text=(score).toString();
 i++;

 if (i>4)
     {
      nextFrame();
     }


 letter1.removeEventListener(MouseEvent.CLICK, Right_Answer);
 letter2.removeEventListener(MouseEvent.CLICK, Right_Answer);
 letter3.removeEventListener(MouseEvent.CLICK, Right_Answer);
 letter4.removeEventListener(MouseEvent.CLICK, Right_Answer);
 letter5.removeEventListener(MouseEvent.CLICK, Right_Answer);
 return i; 
     }

问题是您没有正确删除事件侦听器。不能像这样添加这些事件

letter1.addEventListener(MouseEvent.CLICK, Wrong_Answer);
letter2.addEventListener(MouseEvent.CLICK, Wrong_Answer);
letter4.addEventListener(MouseEvent.CLICK, Wrong_Answer);
letter5.addEventListener(MouseEvent.CLICK, Right_Answer);
letter3.addEventListener(MouseEvent.CLICK, Wrong_Answer);
然后像这样移除它们:

letter1.removeEventListener(MouseEvent.CLICK, Wrong_Answer);
letter2.removeEventListener(MouseEvent.CLICK, Wrong_Answer);
letter3.removeEventListener(MouseEvent.CLICK, Wrong_Answer);
letter4.removeEventListener(MouseEvent.CLICK, Wrong_Answer);
letter5.removeEventListener(MouseEvent.CLICK, Wrong_Answer);
您现在已删除所有事件侦听器,除了:

letter5.addEventListener(MouseEvent.CLICK, Right_Answer);
如果移动到下一帧,则会留下一个事件侦听器,该侦听器将在下一帧触发不正确的结果。随着时间的推移,你会在你的字母和按钮上建立越来越多的“错误”结果和听众


我建议您完全删除您添加的事件侦听器。因此,您可以避免在每个字母上出现重复或更多的听众。

您的问题不清楚。我不知道您的示例中变量I(button?)是什么。但是,如果您尝试为每个i(按钮?)添加处理程序,那么每个按钮上将有两个处理程序(正确答案,错误答案)。在这种情况下,右键回答处理程序将在每次单击时触发。我使用i作为计数器,其中i by defualt=0,用户在舞台上拍摄按钮的次数越多,i将增加。我如何使按钮在拍摄第一个角色后播放第二个声音,在第一个声音文件获得答案后是否有其他方法播放第二个声音文件。