jQuery:小怪异的概率。在事件keydown同时

时间:2012-03-12 07:57:50

标签: javascript jquery

jQuery / javascript不太好,但试图创建一个小游戏。

这里是jsfiddle链接:http://jsfiddle.net/zDer5/

我试图在div周围移动img。我成功地能够向所有方向移动它,并且通过按住一个或两个箭头键来对角线移动。

但问题是,如果我按住右箭头键向右移动,如果我按向上键向上对角移动,现在如果我释放向上键(仍然按住右箭头键)...运动停止,我希望它向右移动。

在所有情况下都会发生这种情况......向左按住,按下并释放......移动停止。

SECOND:一旦我改变了方向,图像会停止。任何平稳运动的指南。

谢谢你

这里是jsfiddle链接:http://jsfiddle.net/zDer5/

我也在这里粘贴相同的代码

    var keys = {};

$('body').keydown(function(event){

    keys[event.which] = true;
    moveDot();
});

$(document).keyup(function (event) {
    delete keys[event.which];
    moveDot();
});

function moveDot(){


            var html = '';
                for (var i in keys) {
                    if (!keys.hasOwnProperty(i)) continue;
                        html += '<p>' + i + '</p>';

                   if(i == '37'){
                        var left = $('#dot').css("left");
                        left = parseInt(left.match(/\d+/));
                        left = left-3;
                        $('#dot').css({ 'left': left + 'px' });
                    }
                   if(i == '38'){
                        var top = $('#dot').css("top");
                        top = parseInt(top.match(/\d+/)); 
                        top = top-3;
                        $('#dot').css({ 'top': top + 'px' });
                   }
                   if(i == '39'){
                      var left2 = $('#dot').css("left");
                        left2 = parseInt(left2.match(/\d+/)); 
                        left2 = left2+3;
                        $('#dot').css({ 'left': left2 + 'px' });
                    }
                    if(i == '40'){
                        var top2 = $('#dot').css("top");
                        top2 = parseInt(top2.match(/\d+/)); 
                        top2 = top2+3;
                        $('#dot').css({ 'top': top2 + 'px' });
                    }     

                }
                $('#out').html(html);
 }

<div id="game-panel">
     <img src="http://203.157.202.2/photos2009/Pic/thumbnails/black_dot_400x400.jpg" id="dot" />
</div>

#game-panel{ position: relative; border: 2px solid #ccc; height: 200px; }
    #game-panel img{ position:absolute; }
    #dot{ left:100px; top:100px; }

1 个答案:

答案 0 :(得分:1)

您的问题是您在密钥上破坏了更新机制。如果您使用间隔来控制刷新循环,它就可以正常工作。请参阅此更新的小提琴:http://jsfiddle.net/zDer5/1/

在旁注中,我真的可以推荐这个教程:http://www.html5rocks.com/en/tutorials/canvas/notearsgame/这似乎完全符合您的需求,虽然它采用了稍微不同的方法。