Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/72.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在数组中保存keydown并执行_Javascript_Jquery - Fatal编程技术网

Javascript 在数组中保存keydown并执行

Javascript 在数组中保存keydown并执行,javascript,jquery,Javascript,Jquery,我正在创建一个简单的2d游戏,我想将按键保存到数组中,并在一个循环中执行它们,这样用户就可以握住一个键,让它看起来像是图表绘制者在不停地移动 我得到了一个setInterval函数,它就像一个游戏计时器,它一直在自己循环。我添加了一个侦听器和一个数组来保存密钥 我检查了数组中的键,它看起来很好,但是moveRight和moveLeft函数在某些方面不起作用 代码如下: this.keysPressed = new Array(); InitGameLoop: functi

我正在创建一个简单的2d游戏,我想将按键保存到数组中,并在一个循环中执行它们,这样用户就可以握住一个键,让它看起来像是图表绘制者在不停地移动

我得到了一个setInterval函数,它就像一个游戏计时器,它一直在自己循环。我添加了一个侦听器和一个数组来保存密钥

我检查了数组中的键,它看起来很好,但是moveRight和moveLeft函数在某些方面不起作用

代码如下:

      this.keysPressed = new Array();
      InitGameLoop: function () {
        var that = this;
        setInterval(function () {
            $(document).keydown(function (e) {
                var key = e.which;
                that.keysPressed.push(key);
                for (var i = 0; i < that.keysPressed.length; i++) {
                    if (that.keysPressed[i] == 38) {
                        that.moveRight(worldWidth, 10);
                    }
                    else if (that.keysPressed[i] == 37) {
                        that.moveLeft(10);
                    }
                    log(that.keysPressed, that.yPos);
                    that.keysPressed.pop();
                }
            });
        }, 60);
this.keysPressed=new Array();
InitGameLoop:函数(){
var=这个;
setInterval(函数(){
$(文档).keydown(函数(e){
var-key=e.which;
那个。按键。按(键);
对于(var i=0;i
我的问题是:

  • 我在干什么
  • 这是个好主意吗?(如果不是,请随意向我推荐另一个:)

  • (对不起我的英语)

    不要将按下的键存储在一个数组中,让每个键代码激活“移动”数组中的一个相关变量。例如,当按下left时,
    movement['left']=1
    。使用
    keyup
    将其设置回0


    让您的循环检查数组中每个可能的移动,并触发corelance中的相关函数,以在给定时刻激活移动。

    在setInterval中注册eventhandler总是错误的。在您的情况下,每60毫秒创建一个额外的侦听器,当您按下一个键时,所有侦听器将触发。而且完全不需要将它们存储在数组中。只需注册侦听器一次,每次按下一个键时它都会触发。如果按下多个键,则侦听器将分别为每个键触发

    $(document).keydown(function (e) {
         var key = e.which;
         console.log(key);
         // call your according functions here
         switch (key){
         case 37: // moving left
            // do stuff
            // set a flag to indicate that you are moving left
            moveleft = true;
            break;
         case 39: // moving right
            // do stuff
            // set a flag to indicate that you are moving right
            moveright = true;
            break;
         }
    });
    

    由于您正在捕获向下键,因此应该设置标志。这样您可以跟踪当前按下的键。在向上键时,您将再次重置这些标志(需要另一个eventhandler).

    我不明白。只要按下右键,你就想将角色向右移动,左键也一样?我有更多的功能,比如跳跃和射击,但我不能同时按下它们并执行它们。所以我想先存储它们,然后在1后循环执行它们。没有理由将它们存储在数组中。只是处理每个关键点。我尝试过,但当我添加一个跳转到这个,我不能让它看起来像我同时跳转和移动。这很好,它可以工作,但如果我想做一个例子跳转+正确它将不起作用。我可以添加什么来确保我有一个跳转+正确的能力?你需要使用标志并检查你的函数run/move是否设置了相应的标志。例如,如果您向右移动,则设置了正确的标志。现在,如果您跳转,请检查是否设置了移动标志并做出相应的反应(跳转到右侧)。谢谢,我花了一段时间才理解您的建议,但效果比我希望的要好。