【问题标题】:Stop countdown timer if user wins game如果用户赢得游戏,则停止倒计时
【发布时间】:2014-03-03 22:45:16
【问题描述】:

我正在开发一款涉及倒数计时器的儿童游戏。如果用户在计时器用完之前匹配所有元素,则“你赢了!”弹出窗口出现。如果在计时器归零之前它们没有匹配所有元素,则会出现“对不起,你输了”弹出窗口。

我遇到的问题是,在用户赢得游戏并且“你赢了!”之后,时钟不会停止倒计时。弹出窗口出现,所以一旦计时器达到零,“对不起,你输了”弹出窗口仍然出现。

这是我的代码:

$("#startClock").click( function(){
   var timer;
   var counter = 4;
   var winner = 0;
   var done = true;

   $("#boat").draggable({
    revert: "invalid", containment: "#wrapper",
    start: function(event, ui){
        if(!done) return false;
    },
    stop: function(event, ui){
        if($(".correct").length == $(".drop").length){
            setTimeout(function(){
                $("<div title='You did it!'>You won!</div>").dialog();
            },500);
            var winner = 1;
        }
    }
    });

    if(!timer){
      timer = setInterval(function() {
         counter--;
         if (counter >= 0) {
           span = document.getElementById("count");
           span.innerHTML = counter;
         }
         if (counter === 0 && winner === 0) {
           $("<div title='Game Over'>Sorry, game over!</div>").dialog();
           clearInterval(counter);
         }
       }, 1000);
    }
});

View my demo game here.(点击右上角的“开始计时”。)感谢您的帮助。谢谢!

劳伦

【问题讨论】:

    标签: javascript jquery timer countdown


    【解决方案1】:

    您需要在 setTimeout 的引用上调用 clearInterval()。

    var timer;
        $("#startClock").click( function(){
           var counter = 60;
           if(!timer){
              timer = setInterval(function() {
             counter--;
              if (counter >= 0) {
                 span = document.getElementById("count");
                 span.innerHTML = counter;
              }
              if (counter === 0) {
                 $("Sorry, you lost!").dialog();
                 clearInterval(timer);
               }
             }, 1000);
           }
        });
    

    当用户赢得游戏时,还添加对 clearInterval(timer) 的调用,但首先检查是否定义了计时器。

    【讨论】:

    • 感谢您的帮助!我刚刚在我的初始帖子中更新了我的代码,以及我发布的演示游戏中的代码。当用户赢得游戏时,我仍然遇到停止时钟的问题。我是这方面的初学者,我敢肯定我遗漏了一些明显的东西,但感谢您提供任何进一步的帮助。谢谢!
    • 您需要使用定时器 clearInterval(timer) 的引用调用 clearInterval。
    • 嗨@Lauren 我试过这个页面,当你获胜时计时器停止,当你获胜时,它似乎没问题 o.o
    【解决方案2】:

    我没有看到玩家获胜时的代码,但您需要在付款人获胜时明确停止计数器。 else if 可以解决这个问题。

    【讨论】:

      【解决方案3】:

      完成此操作的最简单方法可能只是在您的第二个条件中添加&amp;&amp; 以检查玩家是否赢得了比赛。编辑 - 如果玩家赢了,还添加一个 else 来清除计时器。

      if (counter === 0 && /*check if player has not won*/) {
        $("Sorry, you lost!").dialog();
        clearInterval(counter);
      }
      else if (/*if player has won*/) {
        clearInterval(counter);
      

      这样,“对不起,你输了”消息只会在计时器用完并且他们还没有获胜时才会出现。如果您还没有这样做,您可以创建一个在玩家获胜时会发生变化的变量,并在上述条件的后半部分检查该变量的值。

      【讨论】:

      • 我尝试实现以下内容,但它只是阻止了“你丢失了”弹出窗口的出现。有任何想法吗? if (counter === 0 &amp;&amp; document.getElementByID("goodJob").css("display","block"))
      • 是的,对不起,我认为主要目标是防止弹出窗口,但如果您还添加 else 条件,您可以在有人获胜时停止计时器。我将编辑上面的代码以显示。 Eduardo 也有上面的写作思路。
      • 哦,您想知道如何检查玩家是否也赢了。如果您发布的代码也显示了您的代码如何显示“您赢了”文本,我可以帮助您弄清楚。但基本上你想将变量playerWon 设置为 0,如果玩家获胜,则将其更改为 1。那么上面的条件就是if(counter ===0 &amp;&amp; playerWon === 0)。有意义吗?
      • 我尝试实现您列出的代码,但我遇到了“您输了”弹出窗口根本不显示的问题。您可以尝试单击此演示页面右上角的“开始时钟”:spanishforkidsbykids.com/playa/demo 有什么想法吗?感谢您的帮助!
      • 嗨@Lauren,你能告诉我们你用来在控制台中显示 You Lose 弹出窗口的代码吗?它会显示切换错误的消息。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-02
      相关资源
      最近更新 更多