0

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

ps:我发现了类似 object.hitArea 的东西——但是在这种情况下如何使用它呢?

4

2 回答 2

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 回答
1

hittest 是检测对象的常用方法。下面的代码示例是在 hittest 与否时更改 alpha 值。如果你想改变对象的颜色。您在矩阵 colorTransform 中设置了属性。但是,一般来说,在 FlashGames 中Pixel Perfect Collision Detection而不是hitTestObject使用。因为它更准确。更多关于PPCD的信息是谷歌吧。

这是代码: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 回答