0

私はコードを持っています

$(document).keydown(function (key) {
    switch (parseInt(key.which, 10)) {
        case 38://up
            mObj.animate({
                top: "-=100px"
            });
            mObj.animate({
                top: "+=" + change + "px"
            });
            break;
        default:
            break;
    }
});

マリオが空中にいる間に上ボタンが再び押されない場合、上ボタンで画像を正しく上下に移動します。ここにある私のコードの 43 ~ 46 行で試みたような方法で、この状態 (マリオが空中にいる間はクリックできない) を改善したいと思います。

本質的には、マリオが上に動かされていないときは、設定された最小レベルまで単純に下がることを許可したいと考えています。これを行うための助け、または私の別の方法 (43 ~ 46 行でコメントアウトされている方法) が機能しない理由を指摘する方法はありますか?

4

1 に答える 1

1

当面の解決策として、これを試すことができます:

$(document).ready(function () {
    var jumping = false;
    $(document).keydown(function (key) {
        switch (parseInt(key.which, 10)) {
            case 38://up
                if (!jumping) {
                    jumping = true;

                    var jumpUp = new $.Deferred();
                    var jumpDown = new $.Deferred();

                    mObj.animate({
                        top: "-=100px"
                    }, {
                        done: function () {
                            jumpUp.resolve();
                        }
                    });
                    mObj.animate({
                        top: "+=" + change + "px"
                    }, {
                        done: function () {
                            jumpDown.resolve();
                        }
                    });
                    $.when(jumpUp, jumpDown).done(function () {
                        jumping = false;
                    });
                }
                break;
            default:
                break;
        }
    });
});

http://jsfiddle.net/wuY9V/1/

基本的には、マリオがジャンプしているかどうかの「状態」を持っているだけです。「上」の矢印を押すと、マリオがジャンプします。彼を上に動かしてから下に戻すアニメーションが完了するとすぐに、マリオはジャンプしなくなります。そのため、関数はマリオがジャンプしているときに「上」キーを無視します。もっとエレガントな方法があると確信していますが(組み込みのように.animate)、これが私が思いついたものです。

明らかにそれをテストするために、マリオのジャンプ中の任意の時点で「上」キーを押してみてください...それは何もしないはずです.

あまり調べてなかったのですが、なぜsetIntervalマリオを動かすための を持っているのですか?私がやった方法は、keydownイベントを聞くだけです。それが「上」矢印の場合は、彼が上に移動してから下に戻るようにアニメーション化します(あなたが持っているように、そして私がここで支援したように). 左矢印の場合は、一定距離左に移動するようにアニメーション化します。右矢印の場合は、一定距離右に移動するようにアニメーション化します。setInterval押されたキーを常にチェックする必要がある理由はありますか? 多分私は何かが足りない。

于 2013-03-28T17:19:52.737 に答える