0

我正在用 javascript 开发一个简单的游戏,只是为了学习 jquery 和动画,游戏非常简单,只需击中几个弹跳球。

$(document).ready(function() { 
        $('#stage').bind('click',function(e){ 
        $("#bomb").show(); 
        var x = e.clientX - this.offsetLeft -35 ;
        var y = e.clientY - this.offsetTop -35 ;
        $("#bomb").animate({left:x,top:y}, 200, function(){
        $("#bomb").hide(); 
        $("#bomb").css({ top: "365px",left:"240px"});
        $("#bomb").show(); 
                         });    
        }); 
                $("#box1").click(function() {hit("#box1");})
                $("#box2").click(function() {hit("#box2");})
                $("#box3").click(function() {hit("#box3");})


        });

我想在 10 秒后停止执行,但我不知道如何实现这一点,我做了一个简单的 setTimeout,当我单击(并触发绑定方法)时,计数器会自行停止......任何建议?计数器的代码是:

var counter=setInterval(timer, 10000);
         function timer()
        { count=count-1;
        if (count < timeout)
    {   clearInterval(counter);
        imageUrl="img/BGgameover.gif"; 
        $('#stage').css('background-image', 'url(' + imageUrl + ')'); 
        $('#bomb').remove();  
        $('#stage').removeClass('running');
        return;
                        }
        document.getElementById("timer").innerHTML=count;
            }
4

2 回答 2

3

您的计数器停止,因为您只运行代码以每 10 秒更新一次。

您正在使用setInterval10000 毫秒的延迟,因此该timer函数每 10 秒调用一次,我认为您应该使用 1 秒的间隔。

以下代码将每秒运行一次,因此“计时器” div 将更新剩余的秒数,然后当count变为 less then时timeout,将运行游戏结束代码。

var counter = setInterval(timer, 1000);

// Make sure "count" and "timeout" are sane values. What are they defined to initially?

function timer() { 
  count = count - 1;

  if (count < timeout) {   
    clearInterval(counter);
    imageUrl = "img/BGgameover.gif"; 

    $('#stage').css('background-image', 'url(' + imageUrl + ')'); 
    $('#bomb').remove();
    $('#stage').removeClass('running');
    return;
  }

  document.getElementById("timer").innerHTML = count;
}

附带说明一下,使用 setInterval 可能有点狡猾,您可能想考虑使用requestAnimationFrame: http: //www.paulirish.com/2011/requestanimationframe-for-smart-animating/

于 2013-07-29T11:22:09.283 回答
1

您最初是如何使用该setTimeout功能的?

让我们希望我了解您在此处最低级别上想要实现的目标。

如果您用于setInterval管理游戏循环,您可以设置setTimeout具有 10 秒超时值的 以取消设置setInterval游戏循环clearInterval。例如:

// Interval to do game functions at set timeframes.
var game_loop = window.setInterval(
    function_here,
    1000 // = 1 second, can be as long as short you need.
);

// Timeout to clear the above game interval loop.
var game_end_timeout = window.setTimeout(
    function() {
        window.clearInterval( game_loop );
        /* Possible additional cleanups here. */
    },
    10000 // = 10 seconds or whatever time you want to stop the loop execution.
);

我使用上述技术创建了一个小提琴(到目前为止按预期工作)。您可以将game_loop间隔值设置为您需要的任何值,并且game_end_timeout(调用clearInterval)将负责确定游戏循环何时停止。

于 2013-07-29T12:06:14.523 回答