Javascript JQuery和setTimeout()不工作
我使用JQuery来监控HTML游戏的按键操作,但是每当我将JQuery代码添加到gameloop中时,我就会得到一个关于未定义按键的错误Javascript JQuery和setTimeout()不工作,javascript,jquery,html,settimeout,keydown,Javascript,Jquery,Html,Settimeout,Keydown,我使用JQuery来监控HTML游戏的按键操作,但是每当我将JQuery代码添加到gameloop中时,我就会得到一个关于未定义按键的错误 <html> <head> //...Included JS files JQuery, and a JQuery plugin to bind keydown // to a variable and to translate all the keypresses into
<html>
<head>
//...Included JS files JQuery, and a JQuery plugin to bind keydown
// to a variable and to translate all the keypresses into
// names so that we can monitor keypress by keydown.left...
</head>
<body>
<script type="text/javascript">
var gLoop;
//...code excluded for brevity...
var GameLoop = function() {
//...code excluded...
if(keydown.left) {
//do stuff
}
gLoop = setTimeout(GameLoop, 1000/50);
}
</script>
</body>
</html>
它很好用!!!我做错了什么???我的完整代码在GitHub上
我使用了jQuery版本1.4.4。我使用了热键插件,该插件位于,下面是我用于绑定keydown的代码:
$(function() {
window.keydown = {};
function keyName(event) {
return jQuery.hotkeys.specialKeys[event.which] ||
String.fromCharCode(event.which).toLowerCase();
}
$(document).bind("keydown", function(event) {
keydown[keyName(event)] = true;
});
$(document).bind("keyup", function(event) {
keydown[keyName(event)] = false;
});
});
更新:
运行代码时不再出现错误,但按左键时没有任何响应。是否定义了KeyDown?这里有一篇与你的键盘相关的文章
试试
gLoop=setTimeout(“GameLoop();”,1000/50)代码>
我无法按照您定义的setTimeout
的方式调用您的函数
Javascript代码应按顺序加载,但应将代码包装在$(文档)中。ready
将确保在加载外部文件后第一次启动它
$(document).ready(function(){
var gLoop;
//...code excluded for brevity...
var GameLoop = function() {
//...code excluded...
if(keydown.left) {
//do stuff
}
gLoop = setTimeout("GameLoop();", 1000/50);
}
});
是否在初始化window.keydown之前调用函数GameLoop?否,我在文档开头包含的外部文件中初始化了它。在这种情况下,您是否尝试过将内联Javascript包装到window.onload函数中,以便确保已加载外部文件?keydown是在哪里定义的?其中是jQuery代码。您没有显示足够的信息。我添加了请求的信息,但我不认为这是问题所在,当我使用setInterval()时,它工作得很好。是的,我知道我这样做了,因为当我刚刚剪切所有额外代码并使用setTimeout(function(){if(keydown.left)alert(“Working”);},1000/50);它工作得很好,我以前从未犯过错误。如果我从GameLoop函数中取出If(keydown.left)语句,整个脚本运行得非常完美。您是否尝试过$(document.ready()
?只是为了确保这不是问题。仍然返回keydown
未定义错误?然后我将深入研究代码。始终将代码包装在$(document).ready()
中,以防止在页面完全加载之前执行。它经常做那种魔术实际上,更像是防止随机虫子而不是魔术,但是是的。
$(document).ready(function(){
var gLoop;
//...code excluded for brevity...
var GameLoop = function() {
//...code excluded...
if(keydown.left) {
//do stuff
}
gLoop = setTimeout("GameLoop();", 1000/50);
}
});