2

我正在尝试创建一个 jquery 驱动的平台游戏,但我最多是个新手。我遇到的第一个问题是同时键盘输入(可以说是跑和跳)。只是想知道我做错了什么;

var tickRate = 100,
    slideB = 0,
    slideC = 0,
    oldV = 0,
    time = 0;

$('body').keydown(function(e){
    e.stopPropagation();
    if (e.keyCode == '38') { jump(); }
    if (e.keyCode == '40') { }
    if (e.keyCode == '37') { slideB += 1; run(); }
    if (e.keyCode == '39') { slideB -= 1; run(); }
    $("#Background").css('left', (slideB * 10) + 'px');
    $("#Tell").html(slideB);
});

var run = function() {
    slideC -= 1;
    if (slideC < -20) {slideC = 0;}
    $("#Sprite").html(slideC * -11);
};

var jump = function(){
    $("#Character").animate({ top: "50px" },{ duration: 1000, easing: "easeOutQuad" });
    $("#Character").animate({ top: "200px" },{ duration: 1000, easing: "easeInQuad" });
}

目前,如果我按下 Run(右箭头),然后我跳(上箭头),我停止跑步,直到我再次按下 Run。

我将在某个时候需要一个向上计数器,所以也许我可以绑定一个“检查是否按下键”脚本。

任何建议都是有帮助的。谢谢。

4

2 回答 2

0

我弄清楚我做错了什么。我的绘图函数应该在一起,用一个 setInterval 来重绘它。

于 2013-01-25T18:30:55.753 回答
0

对于一般的想法,你可以尝试这样的事情: {你应该根据每个动画持续时间和/或.stop()每个动画的使用方法和/或使用标志来设置间隔持续时间}

http://jsfiddle.net/7juFk/

(function () {
    $('body').on('keydown keyup', function (e) {
        e.stopPropagation();
        var key = e.which,
            type = e.type;
        switch (key) {
            case 38:
                [type == 'keydown' ? jump() : clearInterval(intervalJump)];
                break;
            case 37:
                [type == 'keydown' ? run() : clearInterval(intervalRun)];
                break;
        }
    });
    var intervalRun,
    intervalJump,
    run = function () {
        console.log('running');
        clearInterval(intervalRun);
        intervalRun = setInterval(run, 0);
    },
    jump = function () {
        console.log('jumping');
        clearInterval(intervalJump);
        intervalJump = setInterval(jump, 0);
    }
})();
于 2013-01-25T17:09:05.433 回答