【问题标题】:Array works once, then never again after loop数组工作一次,循环后不再工作
【发布时间】:2012-10-25 15:24:14
【问题描述】:

我正在做一个 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 帧。

所以深呼吸我的问题是,这对于第一个问题来说一切正常,但是当我开始提问第二个问题时,所有答案都是错误的,当你点击它们时,这会在整个测验中继续.有谁知道可能出了什么问题?我的跟踪显示,在问题 1 之后,所有按钮都会产生值 0。

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

提前致谢!

【问题讨论】:

  • 变量numLoops在哪里设置?
  • 第 1 帧,但我的问题和答案在 numLoops 中以相同的方式运行,它们似乎工作得很好
  • 对不起,我的意思是:代码是什么样的? numLoops 的值是多少?它在哪里增加?
  • 'var numLoops:Number = 0;'当问题正确或不正确时它会增加,例如 'function gotoFrameFive (e:TimerEvent):void{ numLoops++;延迟计时器.stop(); delayTimer.reset(); delayTimer.removeEventListener(TimerEvent.TIMER, gotoFrameFive); if(numLoops == 8) { this.gotoAndStop(6); } 其他 { this.gotoAndStop(5); } }'
  • 开始认为 numLoops 可能有太多的控制权......只是注意到它也在第 4 帧上作为 numLoops++ 递增,当我将它添加到第 5 帧时,问题 2 仍然无法正常工作,但令人惊讶的是,问题 3 做到了。然而,问题和答案停止工作。当我从第 4 帧和第 5 帧中删除 borh 'numLoops++' 时,一切都停止了

标签: php arrays actionscript-3 loops


【解决方案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);
}

【讨论】:

  • 哇,这看起来很棒!非常感谢您抽出宝贵时间,现在将尝试进行所有这些修改,并让您知道我的进展情况
  • 嗨,Jmh_gr,我只是想让您知道我的游戏现在可以正常运行,再次感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多