0

我需要检测 MC2 何时超过 MC1 是否在 MC1 的边界内。为此,我通常会使用 4 个单独的 if xy 约束,不幸的是,我的创作中的 .hitTestObject 似乎也需要 4 个单独的 if xy + - 约束。

有谁知道实现这一目标的更简单的方法。

还是 xy + - 约束仍然是唯一的方法?

先感谢您。

在此处输入图像描述

4

2 回答 2

1

检测两个形状的命中问题的最终解决方案是使用 bitmapData.hitTest()。您可以检测任何形状之间的碰撞,而不仅仅是矩形。为此,您必须在 bitmapData 上绘制两个形状,如以下行:

var shape1Bitmap:BitmapData = new BitmapData(shape1MC.with,shape1MC.height,true,0x000000);
shape1Bitmap.draw(shape1MC);

var shape2Bitmap:BitmapData = new BitmapData(shape1MC.with,shape1MC.height,true,0x000000);
shape1Bitmap.draw(shape1MC);

shape1Bitmap.hitTest(new Point(),shape2Bitmap):Boolean;******

要继续使用 BitmapData.hitTest(),请遵循此处的命令: https ://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/display/BitmapData.html#hitTest ()

http://dougmccune.com/blog/2007/02/03/using-hittestpoint-or-hittest-on-transparent-png-images/

在这里添加 bitmapData.hitTest() 样本有点复杂。如果还有其他问题,请告诉我解释。

祝你好运

于 2018-02-23T21:10:45.927 回答
0

我不知道这样做的内置方法,但是hitTestPoint在广场的每个角落使用它很容易:

function isSquareInsideObject(square:DisplayObject, obj:DisplayObject):Boolean {
    if(!obj.hitTestPoint(square.x, square.y, true)) return false;
    if(!obj.hitTestPoint(square.x + square.width, square.y, true)) return false;
    if(!obj.hitTestPoint(square.x + square.width, square.y + square.height, true)) return false;
    if(!obj.hitTestPoint(square.x, square.y + square.height, true)) return false;
    return true;
}

对于比正方形更复杂的形状,您必须添加更多点才能准确,然后它就变得不那么优雅且性能较差的解决方案。

true如果要针对实际的圆形而不是圆形的矩形边界框进行测试,则需要将 shape 参数(hitTestPoint 的第三个参数)设置为。如果您的圆圈是位图(而不是形状),那么我建议在对象上放置一个圆形蒙版以达到相同的效果。

如果您的正方形没有锚定在 0,0,或者您不介意额外(小)性能损失,您也可以使用var bounds:Rectangle = square.getBounds(this)然后使用矩形对象的便利属性(bounds.bottomLeft, bottomRight, topLeft, topRight

于 2018-02-21T19:20:47.900 回答