0

HTML/Javascript で単純なフリップカード/メモリ マッチ (スーパー マリオ ブラザーズ 3 のような) ゲームを作成しようとしていますが、setInterval コマンドにわずかな問題があります。

完全なコードへのリンクは次のとおりです。http://jsfiddle.net/msfZj/ 主な問題/主なロジックは次のとおりです。

if(click == 2)  //denotes two cards being clicked
{
    if(flippedArray[1].src === flippedArray[0].src)  // if click 1 == click 2 then refer to function 'delayMatch' which sets click 1 and 2 cards to not be displayed
    {
        window.setInterval(function() { delayMatch() }, 500);       
        console.log("EQUAL");

    }
    else
    {
        window.setInterval(function() { delayNoMatch() }, 500); // if click 1 != click 2 then display card.png 
        console.log("NOT EQUAL");

    }
        function delayMatch()  //function for matching pairs
    {
    flippedArray[0].style = "display:none;";
    flippedArray[1].style = "display:none;";

    }
        function delayNoMatch()  //function for non-matching pairs
    {
    flippedArray[0].src = "card.png";
    flippedArray[1].src = "card.png";   
    }


    click = 0;  // when clicked two cards set click back to zero    
}

クリックした最初の 2 つのカードは常に機能しますが、その時点から setInterval は 500 ミリ秒ごとに無限ループで関数を何度も実行し続けます。

誰かがこれを適切に行う方法について正しい方向に向けることができれば、非常に感謝しています.

どうぞよろしくお願いいたします。

4

2 に答える 2

1

が必要なようですがsetTimeout、これは一度だけ実行されますか?

window.setTimeout(function() { delayMatch() }, 500);       

それ以外の場合は、 で間隔をクリアする必要がありますがclearInterval(i)、最初に の戻り値を使用して "i" を設定しますsetInterval

var i = window.setInterval(function() { delayMatch() }, 500);

これがデモです(JSFiddle用に少しJQuer化しました)。

于 2013-10-11T01:13:35.010 に答える
1

setInterval() の代わりに setTimeout() を使いたいと思うでしょう

setTimeout を使用するときに便利な関数は、clearTimeout です。たとえば、タイマーを設定したいが、キャンセルするボタンが必要な場合があります

var timer = setTimeout(fn,1000);

//later maybe
clearTimeout(timer);
于 2013-10-11T01:13:38.337 に答える