Actionscript 3 - .hitTestObject或位置约束的替代

时间:2018-02-21 12:49:54

标签: actionscript-3 flash adobe-animate

我需要检测MC2何时超过MC1它是否在MC1的边界内。 要做到这一点,我通常会使用4个单独的if x y约束, 不幸的是,我的作品中的.hitTestObject似乎也需要4个单独的if x y + - 约束。

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

或是x y + - 约束仍然是唯一的方法吗?

提前谢谢你。

enter image description here

2 个答案:

答案 0 :(得分: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;
}

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

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

如果你的方块没有固定在0,0,或者你不介意额外(小)性能命中,你也可以使用var bounds:Rectangle = square.getBounds(this),然后使用方便属性矩形对象(bounds.bottomLeftbottomRighttopLefttopRight

答案 1 :(得分:0)

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

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;******

继续usint 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()示例有点复杂。如果还有其他问题,请让我知道解释。

祝你好运