检测一个数组中的影片剪辑中的对象与另一个对象数组之间的碰撞



简单地说,

我有随机放置和移动的影片剪辑,它们将称为受害者,我有另一组随机移动的影片剪辑,它们有攻击动画,我将称它们为攻击者。

受害者在攻击者中随机游荡,攻击者会在随机时间发射闪电电影片段攻击受害者。正是在这一点上,我试图检查受害者和攻击者之间的碰撞闪电。

两种类型都在单独的数组中,我之前检查了数组与数组,没有问题,我也检查了静态对象与数组对象内部MC,没有问题。然而,当检查数组vs数组对象内部MC时,我卡住了。

代码:

for(var j:int=0;j<NormalBubbleArray.length;j++){
for(var k:int=0;k<LightningStormArray.length;k++){
if(NormalBubbleArray[j].hitTestObject(LightningStormArray[k]).upbolt){
trace("hit")
NormalBubbleArray.removeAt([j]);
LightningStormArray.removeAt([k]);
}
}
}

I have also Tried

 if(NormalBubbleArray[j].hitTestObject(LightningStormArray[k]).upbolt)

和其他10种写法。仍然没有运气,不确定这是我的循环还是碰撞检测。它在运行时没有错误,所以我假设我的语法是好的。提前感谢。

更新:我正在修补它,并意识到我把它包装在一个try catch中,所以我没有看到错误。现在我的问题是:

for(var j = 0; j<NormalBubbleArray.length;j++){
for(var k = 0; k<LightningStormArray.length;k++){
     if((LightningStormArray[k]).upbolt hitTestPoint(NormalBubbleArray [j]), true){
trace("hit")
(NormalBubbleArray [j]).removeEventListener(MouseEvent.MOUSE_MOVE, ChildMouse);
NormalBubbleArray.removeAt([j]);
LightningStormArray.removeAt([k]);
}
}
}

仍然可以编译,但是当需要检测时,我在输出中得到以下错误:

TypeError: Error #1006: value不是一个函数。在BubblesReloaded_fla: MainTimeline/CollisionControl ()

感谢帮助。

明白了!

狡猾的魔鬼。

调试器一直指向hittest行,这与它突出显示的实际行无关,而是与if语句中引起问题的内容有关。

var Lstormpoints:int = 0;
for(var j = 0; j<NormalBubbleArray.length;j++){
for(var k = 0; k<LightningStormArray.length;k++){
if(LightningStormArray[k].upbolt.hitTestPoint(NormalBubbleArray [j]), true){
trace("bubble is hit")
NormalBubbleArray [j].removeEventListener(MouseEvent.MOUSE_MOVE, ChildMouse);
NormalBubbleArray [j].gotoAndPlay(10)/// was (NormalBubbleArray [j]).gotoAndPlay(10) // was causing an error
NormalBubbleArray.removeAt([j]);
LightningStormArray.removeAt([k]);
}
}
} 

让我吃惊的是,调试器一直指向if语句作为错误。我没有抓住的是它试图告诉我这是if语句中的错误。经过一些沉重的追踪,我发现它正在检测碰撞,但气泡并没有像被击中一样行动,这给了我一种没有检测到撞击的错觉。"gotoAndPlay"这条线将死亡动画化,可悲的是,这就是问题所在。

最新更新