游戏:键盘输入同时(运行和跳转)

时间:2013-01-25 16:50:16

标签: jquery input keycode simultaneous

我正在尝试创建一个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。

我在某个时候需要一个上升计数器,所以也许我可以配合'检查按键是否按下'脚本。

任何建议都有帮助。感谢。

2 个答案:

答案 0 :(得分: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);
    }
})();

答案 1 :(得分:0)

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