1

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

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

提前致谢!

4

1 回答 1

1

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

总之,这应该让你去:

笔记:

  • 我已经调整了你的帧,所以问答按钮首先出现在第 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);
}
于 2012-10-25T16:23:48.950 回答