Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.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
Arrays AS3.0 Hittest未注册_Arrays_Actionscript 3_Hittest - Fatal编程技术网

Arrays AS3.0 Hittest未注册

Arrays AS3.0 Hittest未注册,arrays,actionscript-3,hittest,Arrays,Actionscript 3,Hittest,我对没有注册的hittest有意见。我有两个对象数组,ladderlist和blocklist。我正在检查我的主要角色mainchar是否使用嵌套循环命中enterframe事件上的任何对象。我有一个布尔变量MCFall,如果它碰到任何一个对象,它应该会改变。如果MCFall为false,也就是说,如果mainchar碰到梯形图或块,则循环将中断。我目前遇到的问题是,我的代码无法检测mainchar是否命中该块。相关代码如下 addEventListener(Event.ENTER_FRAME,

我对没有注册的hittest有意见。我有两个对象数组,ladderlist和blocklist。我正在检查我的主要角色mainchar是否使用嵌套循环命中enterframe事件上的任何对象。我有一个布尔变量MCFall,如果它碰到任何一个对象,它应该会改变。如果MCFall为false,也就是说,如果mainchar碰到梯形图或块,则循环将中断。我目前遇到的问题是,我的代码无法检测mainchar是否命中该块。相关代码如下

addEventListener(Event.ENTER_FRAME, fl_EnterFrameHandler);
function fl_EnterFrameHandler(event:Event):void{    
  //check if touching ANY ground
  blockCheckLoop: for (var i: int=0; i<=blocklist.length; i++){
    if (blocklist[i].target.hitTestObject(mainchar.target)){
      MCFall = false;
      MCmovespeed = 4;
    }//endif
    else{
      ladderCheckLoop: for (var j: int=0; j<=ladderlist.length;j++){
        if (ladderlist[j].target.hitTestObject(mainchar.target)){
          MCFall = false;
          MCmovespeed = 4;
        }//endif
        else{
          MCFall = true;
          MCmovespeed = 0;
        }//endelseif
        if(MCFall == false) break ladderCheckLoop;
      }//endforj*/
    }//endelseif
    if(MCFall == false) break blockCheckLoop;
  }//endfori
}//endenterframe

我已经用blocklist测试了hittest,没有循环检查mainchar是否命中梯形图,这是可行的。MCmovespeed只是我使用的一个变量,这样mainchar在下落时就不会横向移动。感谢您的帮助。

您最好使用以下代码:

forvar b:int=0;B
var currentBlockList:blockList_class = new blocklistArray[b];
forvar m:int=0;M
var currentMainChar:mainChar_class = new maincharArray[m];

if(currentBlockList.target).hitTestObject(currentMainChar.target)){

    trace("hit");
}
}
}

逻辑似乎很合理,但我不明白为什么要嵌套for循环,为什么这些循环不能并排出现。您现在如何配置它,它将检查一个块,然后检查所有梯子,然后检查下一个块,然后再次检查所有梯子,似乎只是扫过每一组就足够了。至于什么是错误的inspect blocklist,它似乎必须包含一些元素才能运行循环,但可能出于某种原因,它们的位置/大小不正确。我会在blocklist hitTest的条件中放置一个跟踪,以便您可以验证一个块的正hitTest是否实际发生。如果是这样的话,那么是您的中断没有正确执行。我将采取的下一步是在同一个条件中放置一个断点,并从那里开始逐步执行。