0

たとえば、2つのオブジェクト(1つは円、2つ目は正方形)がヒットした場合、ヒットした領域をピクセル単位で取得し、その領域を他の色に描画するにはどうすればよいですか?

ps:object.hitAreaのようなものを見つけましたが、この場合の使用方法は?

4

2 に答える 2

1

オブジェクトを検出するための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;
    } 
}
于 2012-08-15T07:18:11.017 に答える
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);
于 2012-08-15T07:45:22.790 に答える