2011-01-21 3 views
0

オブジェクトがどのオブジェクトと衝突しているかを知る方法はありますか?フラッシュで他のオブジェクト(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))); 
     } 
    } 
} 

それがないすべての親(つまり兄弟)すべてのフレームのすべての子・ノードとの衝突をチェックしています。衝突が検出されると、衝突したアイテムのクラス名がトレースされます。これをより便利にするには、衝突が検出されたときにイベントまたは信号を送出し、クラスが衝突を「聴く」ことができるようにすることをお勧めします。

関連する問題