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 回答