我有代码
$(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行注释掉的那个)不起作用?
答案 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;
}
});
});
它基本上只是马里奥是否跳跃的“状态”。当按下“向上”箭头时,马里奥正在跳跃。一旦动画将他向上移动然后再向后移动,马里奥就不再跳跃了。所以当马里奥跳跃时,该功能忽略了“向上”键。我确信有一种更优雅的方式(就像内置于.animate
),但这就是我提出的方法。
很明显,为了测试它,在马里奥跳跃期间的任何时候尝试按“向上”键......它不应该做任何事情。
我没有太多关注,但我想知道为什么你有setInterval
移动马里奥?我完成它的方式只是听取了keydown
事件。如果它是“向上”箭头,则动画他向上移动然后向下移动(就像你有,并且像我在这里协助的那样)。如果是左箭头,则动画他向左移动一定距离。如果它是右箭头,则动画他向右移动一定距离。是否有理由让setInterval
不断检查是否按下按键?也许我错过了什么。