0

我正在使用 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 上。

我使用 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;
  });
});

更新:

运行代码时不再出现错误,但按左键没有得到任何响应。

4

2 回答 2

1

尝试gLoop = setTimeout("GameLoop();", 1000/50);

我无法按照您定义的方式调用您的函数setTimeout

Javascript 代码应该按顺序加载,但是将代码包装在 a$(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);
        }
  });
于 2012-05-06T01:21:01.460 回答
0

你定义了 KeyDown 吗?这是有关您的按键的相关文章。

在 JS/jQuery 中绑定箭头键

于 2012-05-06T01:05:13.617 回答