0

オブジェクトが衝突しているオブジェクトを知る方法はありますか?... 衝突する他のオブジェクト (ムービークリップ) を識別できる「ボックス オブジェクト」をフラッシュで作成したいと考えています。たとえば、「フィールド」(エンジンまたはワールド) にボックスをドロップし、その中に何かを入れた場合、ボックスが衝突しているオブジェクトの種類をボックスに知らせたいと思います。箱がどのオブジェクトと衝突するか事前にわからないため、hitTestObject を使用できません。

私が達成したいことの大まかな疑似コードは次のとおりです。

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

上記の例の UNKNOWN_OBJECT は、必ずしも同じデータ型ではありません。

4

1 に答える 1

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)));
        }
    }
}

フレームごとに、親 (つまり兄弟) のすべての子ノードとの衝突をチェックするだけです。衝突が検出されると、衝突したアイテムのクラス名が追跡されます。これをより便利にするには、衝突が検出されたときにイベントまたはシグナルをディスパッチして、クラスが衝突を「リッスン」できるようにすることをお勧めします。

于 2011-01-21T07:38:43.853 に答える