2014-12-07 52 views
0
function roll(){ 
randomNumber = Math.ceil(Math.random() * range); 
randomNumber2 = Math.ceil(Math.random() * range); 
randomNumber3 = Math.ceil(Math.random() * range); 
dice1_mc.gotoAndStop(randomNumber); 
dice2_mc.gotoAndStop(randomNumber2); 
dice3_mc.gotoAndStop(randomNumber3); 
num1 = int(randomNumber); 
num2 = int(randomNumber2); 
num3 = int(randomNumber3); 
trace(num1); 
trace(num2); 
trace(num3) 
} 

     function AddCheck(e:MouseEvent):void { 
     ans = num1+num2+num3; 
     if (displayText.text == String(ans)){ 
     //score++; 
     trace("Correct"); 
     trace(ans); 
     displayText.text =""; 
     score+=1; 
     displayScore.text = String(score); 
     opsymbol=0; 
     RandomizeOperation(); 
    }else{ 
     trace("answer is " + ans + "------") 
     clearTxt(); 
     //RandomizeOperation() 
    } 
    } 


    function MultiCheck(e:MouseEvent):void { 
    ans = num1*num3; 
    if (displayText.text == String(ans)){ 
     //score++; 
     trace("Correct"); 
     displayText.text =""; 
     score+=1; 
     displayScore.text = String(score); 
     opsymbol=0; 
     RandomizeOperation(); 
    }else{ 
     trace("answer is " + ans + "------") 
     clearTxt(); 
     //RandomizeOperation() 
    } 
    } 

    function SubCheck(e:MouseEvent):void { 
    ans = num1-num2-num3; 
    if (displayText.text == String(ans)){ 
     //score++; 
     trace("Correct"); 
     trace(ans); 
     displayText.text =""; 
     score+=1; 
     opsymbol=0; 
     displayScore.text = String(score); 
     RandomizeOperation(); 

    }else{ 
     trace("answer is " + ans + "------") 
     clearTxt(); 
     //RandomizeOperation() 
    } 
     } 


    function RandomizeOperation(){ 
    var oprange:uint = 2; 
    opsymbol = Math.ceil(Math.random() * oprange); 
    //opsymbol = 2; 
     //trace(opsymbol); 

     if(opsymbol == 1){ 
    dice2_mc.visible= true; 
    trace(opsymbol + " addition"); 
    enterAns_btn.addEventListener(MouseEvent.CLICK, AddCheck); 
    roll(); 
     } 
     if(opsymbol == 2){ 
    dice2_mc.visible= true; 
    trace(opsymbol + " subtraction"); 
    enterAns_btn.addEventListener(MouseEvent.CLICK, SubCheck); 
    roll(); 
     } 

      } 

enter image description here操作结转旁随机

在每次的问题改变操作矣。我不知道什么是错的。

示例第一个问题是1 + 2 + 3(它是6),下一个问题是减法(3-3-1-正确答案应该是-1),但是它会增加。我无法弄清楚什么是错的

回答

1

这里什么都没有带。你只是没有删除鼠标的eventListener从一种类型到另一种,而你是添加到已经那里MouseEvent(s)。两条曲线在一次是一大线索:

你需要里面的if (opsymbol == 2){ }

//will remove ANY existing current listeners to some function 
enterAns_btn.removeEventListener(event.type, arguments.callee); 
//adds a new listener to some function for this new Check type 
enterAns_btn.addEventListener(MouseEvent.CLICK, SubCheck); 


为什么会发生:

if (opsymbol == 1) 
{ 
    //CHECK ONE: enterAns_btn listens for ADD 
    enterAns_btn.addEventListener(MouseEvent.CLICK, AddCheck); 
} 

if (opsymbol == 2) 
{ 
    //CHECK TWO: enterAns_btn listens for SUBTRACT 
    enterAns_btn.addEventListener(MouseEvent.CLICK, SubCheck); 
} 

因为检查两个发生在CHECK ONE之后,此时你现在告诉Flash enterAns_btn必须实际上做两个功能上点击鼠标..本质上,它听到这个命令:

enterAns_btn.addEventListener(MouseEvent.CLICK, AddCheck); //added by check one 
enterAns_btn.addEventListener(MouseEvent.CLICK, SubCheck); //added by check two 

而这就是为什么你会得到一次两条曲线的结果。其中添加给你7,另一个用于减去给-1。希望它有帮助。

+0

先生,我能做些什么来解决这个问题?非常感谢。我不熟悉enterAns_btn.removeEventListener(event.type,arguments.callee); – Lemon 2014-12-07 16:31:43

+0

在你的函数RandomizeOperation()中找到'if(opsymbol == 2)'部分并再次查看答案。你把它放在'enterAns_btn.addEventListener(MouseEvent.CLICK,SubCheck);'之前。它不需要任何编辑,对于这种情况来说,这是一个通用的命令,用于取消任何其他已有的侦听器。 – 2014-12-07 17:01:03

+0

有没有什么办法可以比较我的答案,而不必通过第一次检查? – Lemon 2014-12-08 03:55:53