平稳运动

时间:2013-02-21 20:08:03

标签: jquery jquery-animate game-physics

我正在尝试使用jQuery和d pad重新创建旧的Mario游戏,我无法让他跳起来并且在向右/向左移动仍然平稳的情况下跌落一定量。到目前为止,这是我的项目:http://jsfiddle.net/Zeaklous/NpKgc/1/

$(document).ready(function () {
$(document).keydown(function (key) {
    switch (parseInt(key.which, 10)) {
        case 38:
            $(".mario").animate({
                top: "-=50px"
            });
            $(".mario").animate({
                top: "+=50px"
            });
            break;
        default:
            break;
        case 83:
            $(".mario").addClass("crouching");
            $('.mario').attr('src', 'https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcSstp0TMfI46ImPw3Ynoq8N64Trn9ew70Dzh8NR4u4VLm40nccV');
            break;
    }
    });
});
setInterval(movePlane, 20);
var keys = {};
$(document).keydown(function (e) {
    keys[e.keyCode] = true;
});
$(document).keyup(function (e) {
    delete keys[e.keyCode];
});
function movePlane() {
    for (var direction in keys) {
        if (!keys.hasOwnProperty(direction)) continue;
        if (direction == 37) { //left
            $(".mario").animate({
                left: "-=5"
            }, 0);
            if (!$('.mario').hasClass('flipped')) {
                $(".mario").toggleClass("flipped");
            }
        }
        if (direction == 39) { //right
            $(".mario").animate({
                left: "+=5"
            }, 0);
            if ($('.mario').hasClass('flipped')) {
                $(".mario").toggleClass("flipped");
            }
        }
        if (direction == 40) { //down 
            if (!$(".mario").hasClass(!"crouching")) {
                $(".mario").toggleClass("crouching");
                $('.mario').attr('src', 'https://encrypted-tbn3.gstatic.com/images?q=tbn:ANd9GcSstp0TMfI46ImPw3Ynoq8N64Trn9ew70Dzh8NR4u4VLm40nccV');
            }
        }
    }
}

关于我如何做到这一点的任何想法?如图所示,它在跳跃动作完成后向侧面移动。

1 个答案:

答案 0 :(得分:2)

你的动画语句是碰撞的。由于您已经在使用间隔,因此无需为左右使用动画:

http://jsfiddle.net/NpKgc/3/

    if (direction == 37) { //left
        $(".mario").css({
            left: "-=2"
        });
        if (!$('.mario').hasClass('flipped')) {
            $(".mario").toggleClass("flipped");
        }
    }
    /*if (direction == 38) {//up
        $(".mario").animate({top: "-=5"}, 0);
    }*/
    if (direction == 39) { //right
        $(".mario").css({
            left: "+=2"
        });
        if ($('.mario').hasClass('flipped')) {
            $(".mario").toggleClass("flipped");
        }
    }