1

PHP からデータを抽出してゲームの質問と回答として使用する Flash クイズを作成しています。すべて正常にインポートされますが、正しい答えを特定するのに問題があります。クイズは多肢選択式で、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 を生成することを示しています。

追加情報が必要な場合はお知らせください。これには困惑しています...

前もって感謝します!

4

1 に答える 1

1

すべてを見ずに何が悪いのかを正確に知ることは困難です。私はあなたがちょうどいくつかを片付けることを提案させてください。まず、配列解析とボタンハンドラーのすべてのコードの重複を避けるために、名前で変数を参照できるという事実を利用します。次に、質問番号を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);
}
于 2012-10-25T16:23:48.950 に答える