我正在尝试使用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毫秒一次又一次地在无限循环中反复运行该功能。
如果有人能够指出我正确的方向,我会非常感激。
非常感谢你的时间。
答案 0 :(得分:1)
看起来你需要setTimeout
,只运行一次?
window.setTimeout(function() { delayMatch() }, 500);
否则,您需要使用clearInterval(i)
清除时间间隔,但首先使用setInterval
的返回值设置“i”:
var i = window.setInterval(function() { delayMatch() }, 500);
Here's a demo(我为JSFiddle确认了一点)。
答案 1 :(得分:1)
你想要使用setTimeout()而不是setInterval()
使用setTimeout时的一个方便的功能是clearTimeout。假设您要设置计时器,但可能需要取消按钮
var timer = setTimeout(fn,1000);
//later maybe
clearTimeout(timer);