我正在尝试创建一个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" });
}
目前,如果我按下Run(右箭头),那么我跳(向上箭头),我停止运行,直到我再次按Run。
我在某个时候需要一个上升计数器,所以也许我可以配合'检查按键是否按下'脚本。
任何建议都有帮助。感谢。
答案 0 :(得分:0)
对于一般的想法,你可以尝试这样的事情:
{您应根据每个动画持续时间设置间隔持续时间和/或为每个动画使用.stop()
方法和/或使用标志}
(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);
}
})();
答案 1 :(得分:0)
我弄清楚我做错了什么。我的绘制函数应该在一起,使用setInterval重绘它。