2012-06-22 30 views
3

我的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/

當我按住箭頭鍵中的一個,蛇已經開始移動得更快,我該怎麼辦?你可以自己測試一下。

+0

今後請在您的文章的所有相關代碼和**不**只包括一個鏈接到的jsfiddle。您的帖子應該獨立於任何其他資源;想想如果jsFiddle將來會發生什麼事情。 – Matt

回答

2

您的setInterval在您的事件處理程序中被調用。外部移動setinterval,以及共享的dir變量。那麼你將不需要0​​。

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/

+0

乾杯,工作很棒:)!儘快接受你的回答。 – y2ok

+0

將來請在您的文章中包含所有相關代碼,並且不要**僅包含jsFiddle的鏈接。您的帖子應該獨立於任何其他資源;想想如果jsFiddle將來會發生什麼事情。 – Matt

+0

馬特 - 注意到... –