例如,如果两个物体(一个圆圈,第二个正方形)被击中,我怎样才能获得以像素为单位的击中区域,然后例如将该区域绘制成其他颜色?
ps:我发现了类似object.hitArea的内容 - 但在这种情况下如何使用它?
答案 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);