我正在使用JQuery来监控HTML游戏的按键操作,但每当我将jquery代码添加到我的游戏循环中时,我都会收到关于keydown未定义的错误。
<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>
此代码出现错误,指出keydown未定义。我什么时候尝试过这段代码:
setInterval(function(){
if(keydown.left) alert("Working");
}, 1000/50);
工作正常!!!我究竟做错了什么???我的完整代码在GitHub上here。
我使用的是jQuery 1.4.4版。我使用了https://raw.github.com/figitaki/PuzzleMan/master/key_status.js提供的热键插件。这是我用来绑定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;
});
});
更新:
我运行代码时不再出错,但按左键我没有得到任何响应。
答案 0 :(得分:1)
尝试gLoop = setTimeout("GameLoop();", 1000/50);
我无法按照您定义setTimeout
的方式调用您的函数。
Javascript代码应该按顺序加载,但是将代码包装在$(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);
}
});
答案 1 :(得分:0)
你定义了KeyDown吗?这是一篇关于你的按键的相关文章。