AS3 を使用してエリア内のすべてのムービー クリップを取得する方法はありますか? 複数の選択を行うには、これが必要です。
5 に答える
使用する必要はないかもしれません。getObjectsUnderPoint().
すべての項目が 1 つの包含クリップにある場合は、単純にコンテナーの子をループして、それらが選択範囲内にあるかどうかを確認できます。
// The list of items contained in the selection.
var selection:Array = new Array();
// The rectangle that defines the selection in the containers coordinate space.
var selectionRect:Rectangle = new Rectangle(x, y, width, height);
// Loop throught the containers children.
for(var a:int; a<container.numChildren; a++){
// Get the childs bounds in the containers coordinate space.
var child:DisplayObject = container.getChildAt(a);
var childBounds:Rectangle = child.getRect(container);
// Check if this childs bounds against the selection bounds
if(childBounds.intersects(selectionRect)){
selection.push(child);
}
}
エリア内のすべてのオブジェクトをチェックする場合は、hitTestPointメソッドでforループを使用する必要があります。このforループに大きな増分を加えることで、このループを最適化できます。たとえば、幅または高さが50ピクセル未満のオブジェクトがないことがわかっている場合は、ネストされたループの幅または高さ、あるいはその両方に50を増分として配置します。以下のすべてのポイントを見つけるためのサンプルを次に示します。長方形の領域または指定した任意の領域
for(var j:int = Rect.x; j0){trace("見つかったオブジェクト"+オブジェクト); }}}
エリア内のすべてのオブジェクトをチェックする場合は、hitTestPointメソッドでforループを使用する必要があります。このforループに大きな増分を加えることで、このループを最適化できます。たとえば、幅または高さが50ピクセル未満のオブジェクトがないことがわかっている場合は、ネストされたループの幅または高さ、あるいはその両方に50を増分として配置します。以下のすべてのポイントを見つけるためのサンプルを次に示します。長方形の領域または指定した任意の領域
for(var j:int = Rect.x; j <= Rect.width; j ++){
for(var i:int = Rect.y; i <= Rect.height; i ++){
var pt:Point = new Point(x、y);
オブジェクト=container.getObjectsUnderPoint(pt)
if(objects.length> 0){trace("見つかったオブジェクト"+オブジェクト); }
}
}
「エリア」であるスプライトを持つことができます。つまり、チェックしたい領域のサイズです。したがって、すべてのムービークリップをループして、ムービークリップがスプライトと衝突するかどうかを hitTestObject または hitTestPoint で確認してください。だとしたら、その領域です。これは、RTS ゲームでユニットをドラッグして選択する方法を作成する方法です。
エリア内のすべてのムービークリップを取得する「組み込み」は何もないと確信しています。
近いものはおそらくgetObjectsUnderPointだけです。このメソッドは、領域ではなく単一のポイントの下にある DisplayObjects のリストを提供しますが、領域内の MovieClip を手動で見つけるために使用できます。