2013-09-03 5 views
0

Я делаю викторину, которая, когда игрок вводит последовательность букв, система будет сравнивать вход с правильным ответом. Я использовал массив для хранения всех вопросов, и система должна загрузить элемент из первого индекса массива, который является «F_L_A_S_H», но он отображает последний элемент, может ли кто-нибудь сказать мне, как это исправить?Получение каждого элемента из массива actionscript 3

общественный класс главный расширяет MovieClip {

var myRes:Array; 
    var answerArr:Array; 
    var questionNo:int = 0; 


    public function main() { 

     this.displayQuestion(); 
    } 



    public function displayQuestion():void { 

     myRes = new Array(); 
     answerArr = new Array(); 

     var questionArr:Array = new Array("F_L_A_S_H", "H_E_L_L_O", "5_+_5_=_10"); 


     for (var i:int =0; i<questionArr.length; i++) { 

      var myStr:String = questionArr[i]; 

      answerArr = myStr.split("_"); 

      var subStr:Array = myStr.split("_"); 
      subStr.sort(this.randomSort); 
      word1.changelabel(subStr[0]); 
      word2.changelabel(subStr[1]); 
      word3.changelabel(subStr[2]); 
      word4.changelabel(subStr[3]); 
      word5.changelabel(subStr[4]); 

      stage.addEventListener(KeyboardEvent.KEY_DOWN,ClickDown); 

     } 

    } 

    public function ClickDown(e:KeyboardEvent):void{ 

    alert1.changelabel(''); 
    if(e.keyCode == 65){ 

     myRes.push(word1.getLabel()); 
     trace(myRes); 
     result1.changeLabel(myRes); 
     this.CheckAnswer(answerArr); 

    } else if (e.keyCode == 83) { 

     myRes.push(word2.getLabel()); 
     trace(myRes); 
     result1.changeLabel(myRes); 
     this.CheckAnswer(answerArr); 
    } else if (e.keyCode == 68) { 

     myRes.push(word3.getLabel()); 
     trace(myRes); 
     result1.changeLabel(myRes); 
     this.CheckAnswer(answerArr); 
    } else if (e.keyCode == 70) { 

     myRes.push(word4.getLabel()); 
     trace(myRes); 
     result1.changeLabel(myRes); 
     this.CheckAnswer(answerArr); 
    } else if (e.keyCode == 71) { 

     myRes.push(word5.getLabel()); 
     trace(myRes); 
     result1.changeLabel(myRes); 
     this.CheckAnswer(answerArr); 
    } 


} 



    public function randomSort(objA:Object, objB:Object):int { 
      return Math.round(Math.random() * 3) - 1 
    } 


    public function CheckAnswer(newLabel:Array):void { 

     if(myRes.length > 4) { 

       for (var i:int = 0; i<myRes.length; i++) { 

        if (myRes[i] !== newLabel[i]) { 
         alert1.changelabel('You are Wrong!'); 
         break; 
        } else { 
         alert1.changelabel('You are Right!'); 
        } 

       } 
         myRes.length = 0; 

     } 


    } 


} 

}

ответ

0

В displayQuestion вы присваиваете значение answerArr. Тем не менее, вы делаете это в для цикла. Это означает, что вы перебираете все элементы и изменяете значение этой переменной. Вот почему вы получаете самые последние ответы напрямую.

+0

Точно. У меня есть три массива. questionArr содержит все вопросы в каждом элементе. answerArr - ответ этого конкретного вопроса, и myRes - это вход от игрока. Я должен помещать эти массивы в цикл for, потому что каждый раз при загрузке нового вопроса ответ и ввод будут разными. моя логика правильная? или из-за структуры? – user1805430

+0

Дело в том, что * answerArr * - это переменная класса. И последняя итерация цикла устанавливает его значение. То есть вы всегда получаете последний элемент в * answerArr *. – Krasimir

0

Как Красимир попытался объяснить, на последней итерации цикла «for» answerArr устанавливается, чтобы содержать ТОЛЬКО разделительные буквы элемента LAST в массиве questionArr. Остальная часть вашего кода никогда не увидит, что answerArr содержит ничего, кроме этого. Я бы предложил использовать массив массивов, так что каждый индекс массива answerArr содержит массив разделенных букв в вопросеArr. Таким образом, в течение цикла:

answerArr.push(myStr.split("_")); 

Раньше вам нужно будет объявить answerArr следующим образом ...

var answerArr:Array = new Array(); 

... поэтому он определен как объект Array, к «выталкивания» к ,

Смежные вопросы