たとえば、2つのオブジェクト(1つは円、2つ目は正方形)がヒットした場合、ヒットした領域をピクセル単位で取得し、その領域を他の色に描画するにはどうすればよいですか?
ps:object.hitAreaのようなものを見つけましたが、この場合の使用方法は?
たとえば、2つのオブジェクト(1つは円、2つ目は正方形)がヒットした場合、ヒットした領域をピクセル単位で取得し、その領域を他の色に描画するにはどうすればよいですか?
ps:object.hitAreaのようなものを見つけましたが、この場合の使用方法は?
オブジェクトを検出するためのhittestは一般的な方法です。以下のコードの例は、ヒットテストの有無にかかわらずアルファ値を変更するものです。必要に応じてオブジェクトの色を変更します。マトリックスcolorTransformでプロパティを設定します。しかし、一般的に、FlashGamesPixel Perfect Collision Detection
ではhitTestObject
使用されません。それははるかに正確だからです。PPCDの詳細については、Googleitをご覧ください。
ここにコードがあります:HitTest_Object
sun_mc.startDrag( true );
stage.addEventListener( Event.ENTER_FRAME, onEnter );
function onEnter( e: Event ): void
{
if( sun_mc.hitTestObject( snowman_mc ) == true )
{
snowman_mc.alpha = 0.5;
}
else
{
snowman_mc.alpha = 1;
}
}
hitAreaプロパティは、ヒットテストでオーバーラップした領域ではなく、クリック可能なスプライトの領域を定義するためのものです。
オーバーラップする領域を取得するには、共通の親を基準にした各オブジェクトの境界を取得してから、交差関数を使用する必要があります。ステージはすべての表示オブジェクトの親であり、localToGlobal関数とglobalToLocal関数を簡単に操作できるため、ステージの使用はおそらく最も簡単です。
始めるためのサンプルコードを次に示します。sprite1とsprite2が重なっていて、重なっている長方形をsprite1に描画したいとします。
var bounds1:Rectangle = sprite1.getBounds(stage);
var bounds2:Rectangle = sprite2.getBounds(stage);
var overlapping:Rectangle = bounds1.intersection(bounds2);
var localPoint:Point = sprite1.globalToLocal(new Point(overlapping.x, overlapping.y));
overlapping.x = localPoint.x;
overlapping.y = localPoint.y;
var shape:Shape = new Shape();
shape.graphics.beginFill(0xff0000);
shape.graphics.drawRect(overlapping.x, overlapping.y, overlapping.width, overlapping.height);
shape.graphics.endFill();
sprite1.addChild(shape);