将图像移动到指定的最小值

时间:2013-03-28 17:01:03

标签: javascript animation positioning

我有代码

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

在Mario播出时,如果没有再次按下向上按钮,则会在向上按钮上正确地上下移动图像。我想通过一种方法来解决这个问题(在马里奥空中时无法点击),例如我的代码{43}中找到here的第43-46行。

从本质上讲,我想让马里奥在不被提升的情况下完全回落到一个最低限度。有什么帮助让它做到这一点或指出为什么我的替代方法(第43-46行注释掉的那个)不起作用?

1 个答案:

答案 0 :(得分: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不断检查是否按下按键?也许我错过了什么。