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    
}

我单击的前两张卡总是有效:但从那时起,setInterval 会以每 500 毫秒的无限循环一遍又一遍地运行该函数。

如果有人能指出我如何正确地做到这一点,我将非常感激。

非常感谢您的宝贵时间。

4

2 回答 2

1

看起来你需要setTimeout,它只运行一次?

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

否则,您需要使用 清除间隔clearInterval(i),但首先使用 的返回值设置“i” setInterval

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

这是一个演示(我对 JSFiddle 进行了一些 JQuerified)。

于 2013-10-11T01:13:35.010 回答
1

您将要使用 setTimeout() 而不是 setInterval()

当您使用 setTimeout 时,一个方便的功能是 clearTimeout。假设您想设置一个计时器,但可能想要一个按钮来取消

var timer = setTimeout(fn,1000);

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