jquery / javascript上的蛇游戏按键时,蛇移动得更快

时间:2012-06-22 10:21:32

标签: javascript jquery

我的JavaScript代码如下:

$(document).keydown(function(event){
    var move, inter;
    clearInterval(inter);
    inter = setInterval(move = function() {
        var dir = $(".snake").data('dir');
        var snake = $('.snake');
        var food = $('.food');
        if(dir == 'top') {
            snake.css({"top": $(".snake").position().top + 5 + "px"});
        }
        if(dir == 'bottom') {
            snake.css({"top": $(".snake").position().top - 5 + "px"});
        }
        if(dir == 'left') {
            snake.css({"left": $(".snake").position().left + 5 + "px"});
        }
        if(dir == 'right') {
            snake.css({"left": $(".snake").position().left - 5 + "px"});
        }
    }, 1500);
    if(event.which == 40) {
        $(".snake").data('dir','top');
    } else if(event.which == 39) {
        $(".snake").data('dir','left');           
    } else if(event.which == 37) {
        $(".snake").data('dir','right');        
    } else if(event.which == 38) {
        $(".snake").data('dir','bottom');    
    }; 

});​

http://jsfiddle.net/6bKHc/94/

当我按住其中一个箭头键时,蛇开始移动得更快,我怎么能把它关掉?你可以自己测试一下。

1 个答案:

答案 0 :(得分:2)

您的setInterval在您的事件处理程序中被调用。将setinterval移到外面,以及共享的dir变量。那么您就不需要clearinterval

var dir = 'bottom';
 setInterval(move = function() {
    var snake = $('.snake');
    var food = $('.food');
    if(dir == 'top') {
        snake.css({"top": $(".snake").position().top + 5 + "px"});
    }
    if(dir == 'bottom') {
        snake.css({"top": $(".snake").position().top - 5 + "px"});
    }
    if(dir == 'left') {
        snake.css({"left": $(".snake").position().left + 5 + "px"});
    }
    if(dir == 'right') {
        snake.css({"left": $(".snake").position().left - 5 + "px"});
    }
}, 150); 
$(document).keydown(function(event){
    if(event.which == 40) {
        dir = 'top';
    } else if(event.which == 39) {
        dir = 'left';           
    } else if(event.which == 37) {
        dir = 'right';        
    } else if(event.which == 38) {
        dir = 'bottom';    
    }; 
});

http://jsfiddle.net/zatsq/