数组工作一次,然后再循环后再也没有

时间:2012-10-25 15:24:15

标签: php arrays actionscript-3 loops

我正在进行Flash测验,我从PHP中提取数据,以用作游戏中的问题和答案。一切都进口得很好,但我在确定正确的答案时遇到了问题。测验是多项选择,4个可能的答案。当您单击按钮时,它将激活我的功能 -

button1.addEventListener(MouseEvent.CLICK,returnAnswerOne);
function returnAnswerOne(event:Event){
answeredQuestion()
}

这很好用。它激活以下功能 -

function answeredQuestion() {
    if(correctoneArray[numLoops] == 1){
        trace(correctoneArray[numLoops]);
        trace("right answer");
        gotoAndStop(4);
    } else { 
            trace(correctoneArray[numLoops]);
        trace("wrong answer");
        gotoAndStop(5);
    }

我的闪光灯知道答案是否正确的方式是看到数字'1'存在。我正确答案的PHP输出如下所示

&correctone=0/0/0/0/0/0/0/0 &correcttwo=0/1/0/0/1/0/1/0 &correctthree=1/0/1/0/0/0/0/1 &correctfour=0/0/0/1/0/1/0/0

这是我用来导入这些数组的方法 -

var loader3:URLLoader = new URLLoader();
loader3.addEventListener(Event.COMPLETE, completeHandler2);
loader3.dataFormat = URLLoaderDataFormat.VARIABLES;
loader3.load(request);

function completeHandler2(event:Event) :void{
var correctone:String = event.target.data.correctone;
var correctoneArray:Array=correctone.split("/")
trace("Correctone Loaded");

试图避免垃圾邮件发送我的整个脚本,所以想象一下这些函数中有4个,每个都检查'1'。第5帧是你被告知问题是错误的地方,第4帧是你被告知问题是对的。上面发布的所有脚本都在第3帧发布。

所以深呼吸我的问题是,这一切都适用于第一个问题,但是当我继续问题2时,所有答案都是错误的,当你点击它们时,这在整个测验中都会继续。有人知道会出现什么问题吗?我的跟踪显示在问题1之后,所有按钮都产生值0。

如果您需要任何其他信息,请告诉我,这个让我难过......

提前致谢!

1 个答案:

答案 0 :(得分:1)

如果没有看到所有内容,很难确切地知道出了什么问题。我建议你整理一些东西。首先,利用您可以按名称引用变量的事实,以避免重复数组解析和按钮处理程序的所有代码。其次,请确保您只在一个地方增加您的问题编号。第三,使用更有意义的变量名称。

总之,这应该让你前进:

注意:

  • 我调整了你的框架,所以Q& A按钮首先出现在第3帧,但延伸到第4帧。现在正确答案在第5帧,错误答案是第6帧。这样你就不会每次返回框架 4 时,不断重新加载答案并重新创建事件处理程序。
  • 我假设你的答案按钮被命名为' button1',' button2'等。
// ----------------------------- FRAME 1 -----------------------------//
// Declare answers array and questionNumber counter
var answers:Array = [];
var questionNumber:int = 0;

// ----------------------------- FRAME 3 -----------------------------//
//  Just load the answers and hook up the  event handlers
// -------------------------------------------------------------------//

// Load the answers 
var answerKeyLoader:URLLoader = new URLLoader();
answerKeyLoader.addEventListener(Event.COMPLETE, answerKeyCompleteHandler);
answerKeyLoader.dataFormat = URLLoaderDataFormat.VARIABLES;
answerKeyLoader.load(request);

function answerKeyCompleteHandler(event:Event):void {
    var numberNames:Object = { one:1, two:2, three:3, four:4 };
    for(var nName:* in numberNames) {
        var index:int = numberNames[nName];
        var answerString:String = e.target.data["correct" + nName];
        answers[index] = answerString.split("/");
    }
}

// Attach button handlers (all buttons can use the same handler)
for(var i:uint = 1; i < 5; i++) {
    var button:DisplayObject = this["button" + i.toString()];
    button.addEventListener(MouseEvent.CLICK, onClickAnswerButton);
}

function onClickAnswerButton(e:MouseEvent):void {
    var buttonName:String = DisplayObject(e.currentTarget).name;
    var buttonNumber:int = int(buttonName.substring(6,1));
    var correct:Boolean = answers[buttonNumber][questionNumber] == 1;
    // Double check:
    trace("buttonName =", buttonName, ", buttonNumber =",buttonNumber,
          ", questionNumber =", questionNumber, ", correct =", correct);

    // Increment questionNumber here and nowhere else
    questionNumber++;
    if(correct) {
        trace("right answer");
        gotoAndStop(5);
    } else{
        trace("wrong answer");
        gotoAndStop(6);
    }
}

// ----------------------------- FRAME 4 -----------------------------//
//  Just show the new question
// -------------------------------------------------------------------//
someLabel.text = questions[questionNumber];
stop();

// ----------------------------- FRAME 5 -----------------------------//
someButton.addEventListener(MouseEvent.CLICK, onClickButton);
function onClickButton(e:MouseEvent):void {
    someButton.removeEventListener(MouseEvent.CLICK, onClickButton);
    goToAndPlay(4);
}

// ----------------------------- FRAME 6 -----------------------------//
someButton.addEventListener(MouseEvent.CLICK, onClickButton);
function onClickButton(e:MouseEvent):void {
    someButton.removeEventListener(MouseEvent.CLICK, onClickButton);
    goToAndPlay(4);
}