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