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" });
}

現在、実行を押した場合 (右矢印)、ジャンプ (上矢印) し、再度実行を押すまで実行を停止します。

ある時点でアップカウンターが必要になるので、「キーが押されたかどうかを確認する」スクリプトを組み込むことができるかもしれません。

どんな提案も役に立ちます。ありがとう。

4

2 に答える 2

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 に答える
0

私は自分が間違っていたことを理解しました。私の描画関数は、setInterval を使用してすべて再描画する必要がありました。

于 2013-01-25T18:30:55.753 に答える