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

Posted

技术标签:

【中文标题】检测数组中影片剪辑内的对象与另一个对象数组之间的碰撞【英文标题】:Detecting collision between an object inside a movie clip that is in an array vs another array of objects 【发布时间】:2017-02-24 23:06:13 【问题描述】:

简单地说,

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

受害者在攻击者之间随机游荡,攻击者会随机射出闪电电影剪辑来攻击受害者。正是在这一点上,我试图检查受害者和袭击者闪电之间的碰撞。

这两种类型都在单独的数组中,我之前检查过数组与数组没有问题我还检查了静态对象与数组对象内部 MC 没有问题。但是,在检查数组与数组对象内部 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]);




我也试过了

 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:错误 #1006:值不是函数。 在 BubblesReloaded_fla::MainTimeline/CollisionControl()

感谢您的帮助..我仍在修补它。

【问题讨论】:

【参考方案1】:

知道了!

狡猾的恶魔。

调试器一直指向 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 线动画死亡,可悲的是,这就是问题所在。很高兴我能成功。

【讨论】:

以上是关于检测数组中影片剪辑内的对象与另一个对象数组之间的碰撞的主要内容,如果未能解决你的问题,请参考以下文章

在 Actionscript 3 中链接两个数组

用flash as3语言如何将影片剪辑存入一个数组以及如何访问?

我可以一次在数组中显示影片剪辑的多个副本吗

影片剪辑数组 ActionScript 3

如何从导入到数组的 png 中创建影片剪辑?

如何从影片剪辑中调用对象