0

プログラムの最後に、evalSeqResults()で「level」をインクリメントしてから結果を表示します(ただし、後でこのメソッドにさまざまな要件を追加します)

resultStrが画面に表示されると、正しいレベルになっていますが、数秒後、「level」がもう一度増加し、それに依存する他の2つの変数も増加します。

なぜこれなのか誰か知っていますか?

ここにいくつかのコードがあります:http://pastebin.com/RuKLadmK

function endSequence() {     
    evalSeqResults(); 
    displaySeqResults();
 }

function evalSeqResults() {
    level++;
}

function displaySeqResults() {
    var resultStr = "You scored " + correctCount + " out of " + (NUM_OF_STACKS + 20) +
    "<br/>";
    resultStr += "Your next level is: " + level + "<br/>";
    resultStr += "There will be " + LEVELS[level].numDecks + " decks and you are looking for " + LEVELS[level].nBack + " back. <br/>";
    resultStr += "Press START to continue";
    $('#resultspara').html(resultStr);
    $('#resultspara').show(0);
 }
4

1 に答える 1

1

あなたのlevel変数はどこにも定義されていません。endSequenceただし、あなたのコードのが呼び出される箇所で不具合を発見しました:

function doNext() {
     if (cardNum < maxCard) {
          cardNum++;
          fixate();
     }
     if (cardNum == maxCard) {
          endSequence();
     }
}

としましょうとcardNumはです。最初に呼び出されると、最初の条件が true になります。に増加され、呼び出されます。その後、2 番目の条件も真 ( ) -が呼び出されます。2 回目に呼び出され、2 番目の条件のみが一致し、再度実行されます。4maxCard5doNextcardNum5fixate5==5endSequencedoNextendSequence

私はあなたが望んでいたと思います:

function doNext() {
     if (cardNum < maxCard) {
          cardNum++;
          fixate();
     } else if (cardNum == maxCard) {
//     ^^^^
          endSequence();
     }
}
于 2012-08-02T20:14:08.777 に答える