从数组动作中获取每个元素3

时间:2013-09-03 09:59:58

标签: arrays actionscript-3 flash

我正在做一个测验游戏,当玩家输入字母序列时,系统会将输入与正确答案进行比较。我使用数组来存储所有问题,系统应该从数组的第一个索引加载元素,即'F_L_A_S_H',但是它直接显示最后一个元素,任何人都可以告诉我如何解决这个问题吗? / p>

public class main扩展了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;

        }


    }


}

}

2 个答案:

答案 0 :(得分:0)

displayQuestion 中,您要为 answerArr 分配值。但是,您在 for 循环中执行此操作。这意味着您遍历所有元素并更改该变量的值。这就是你直接得到最新答案的原因。

答案 1 :(得分:0)

正如Krasimir试图解释的那样,在'for'循环的最后一次迭代中,answerArr被设置为仅包含questionArr数组中LAST项的拆分字母。其余的代码永远不会看到answerArr包含除此之外的任何内容。 我建议使用数组数组,以便answerArr数组的每个索引包含questionArr中的拆分字母数组。所以,在for循环中:

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

之前,您需要按如下方式声明answerArr ......

 var answerArr:Array = new Array();

...所以它被定义为一个“推”到的数组对象。