我遇到了命中测试未注册的问题。我有两个对象数组,梯形列表和阻止列表。我正在检查我的主角 mainchar 是否使用嵌套循环命中 enterframe 事件中的任何对象。我有一个布尔变量 MCFall,如果它命中任何一个对象,它应该会改变。如果 MCFall 为假,即如果 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
我已经用阻止列表测试了命中测试,而没有循环检查 mainchar 是否击中梯子,这有效。MCmovespeed只是我使用的一个变量,这样主字符在下降时就不能侧向移动。任何帮助将不胜感激,谢谢。
你最好使用以下代码:
for(var b:int = 0; b
var currentBlockList:blockList_class = new blocklistArray[b];
for(var m:int = 0; m
var currentMainChar:mainChar_class = new maincharArray[m];
if(currentBlockList.target).hitTestObject(currentMainChar.target)){
trace("hit");
}
}}