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

Actionscript 3 Actionscript 3-替代.hitTestObject或位置约束,actionscript-3,flash,adobe-animate,Actionscript 3,Flash,Adobe Animate,我需要检测MC2何时超过MC1,它是否在MC1的边界内。 为此,我通常使用4个单独的if x y约束, 不幸的是,我的作品中的hitTestObject似乎还需要4个独立的if-xy+-constraints 有人知道一种更简单的方法来实现这一点吗 或者xy+约束仍然是实现这一点的唯一方法 先谢谢你 我不知道有什么内置方法可以做到这一点,但在正方形的每个角落使用hitTestPoint非常简单: function isSquareInsideObject(square:DisplayObject

我需要检测MC2何时超过MC1,它是否在MC1的边界内。 为此,我通常使用4个单独的if x y约束, 不幸的是,我的作品中的hitTestObject似乎还需要4个独立的if-xy+-constraints

有人知道一种更简单的方法来实现这一点吗

或者xy+约束仍然是实现这一点的唯一方法

先谢谢你


我不知道有什么内置方法可以做到这一点,但在正方形的每个角落使用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的shape参数第三个参数设置为true。如果您的圆是位图而不是形状,那么我建议在对象上放置一个圆形遮罩以获得相同的结果


如果你的正方形没有定位在0,0,或者你不介意额外的小性能影响,你也可以使用var bounds:Rectangle=square.getbounds这个,然后使用矩形对象边界的便利属性。bottomLeft,bottomRight,topLeft,topRight

你的问题的最终解决方案是检测两个形状的影响,是使用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,请按以下顺序操作:

在此处添加bitmapData.hitTest示例有点复杂。如果还有其他问题,请让我知道并解释


祝你好运

?我认为你没有理解这个问题。这个答案虽然是透明像素位图的一个很好的替代方案,但将产生与hitTestObject相同的结果,因为它将为任何重叠返回true,而问题是确定正方形是否完全位于圆内。