如何在hitTestObject(Actionscript)之后获取命中区域

时间:2012-08-15 06:50:28

标签: actionscript-3 flash actionscript

例如,如果两个物体(一个圆圈,第二个正方形)被击中,我怎样才能获得以像素为单位的击中区域,然后例如将该区域绘制成其他颜色?

ps:我发现了类似object.hitArea的内容 - 但在这种情况下如何使用它?

2 个答案:

答案 0 :(得分:1)

hittest检测对象是一种常见的方式。 以下示例代码是hittest与否时的更改alpha值。 如果要更改对象的颜色。你在矩阵colorTransform中设置属性。 但是,通常情况下,在FlashGames Pixel Perfect Collision Detection而不是hitTestObject中使用。因为它更准确。有关PPCD的更多信息,请访问Google。

这里是代码: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;
    } 
}

答案 1 :(得分: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);