2011-01-21 54 views
0

有沒有辦法知道一個對象與哪個對象碰撞?...我想在Flash中創建一個「盒子對象」,它可以識別任何與它碰撞的其他對象(Movieclips)。例如,如果我把這個盒子放在'領域'(引擎或世界)上,並且我把它放在裏面,我希望盒子告訴我它碰撞的是什麼樣的對象。我不能使用hitTestObject,因爲我不知道盒子會提前與哪個對象碰撞。如何獲取我在Actionscript 3中碰撞的對象?

粗略pesudocode什麼,我想實現如下:

if (Movieclip(parent). UNKNOWN_OBJECT .hitTestObject(this)) 
     trace(UNKNOWN_OBJECT.name); 

UNKNOWN_OBJECT在上面的例子中不一定具有相同的數據類型。

回答

2

您可以在每一幀遍歷父級的所有子級以查看是否發生任何衝突。這是一個強力檢查,如果你有很多對象來檢查碰撞,我建議你看看Quadtrees或類似的東西。

下面是一個例子,說明你的「框對象」可以檢查碰撞:

// this is your ENTER_FRAME handler 
private function handleEnterFrame(evt:Event):void { 
    var p:MovieClip = parent as MovieClip; 
    if(!p){ 
     return; 
    } 
    for(var i:int = 0, len:int = p.numChildren; i < len; i++){ 
     var child:DisplayObject = p.getChildAt(i); 
     if(child != this && this.hitTestObject(child)){ 
      trace("Collides with: " + getQualifiedClassName(p.getChildAt(i))); 
     } 
    } 
} 

它所做的就是與父(即兄弟姐妹)每一幀的所有子節點檢查碰撞。當檢測到碰撞時,它會跟蹤碰撞項目的類名。爲了使它更有用,在檢測到碰撞時分派一些事件或信號是一個好主意,這樣你的班級就可以「聽」碰撞。