我需要检测MC2何时超过MC1它是否在MC1的边界内。 要做到这一点,我通常会使用4个单独的if x y约束, 不幸的是,我的作品中的.hitTestObject似乎也需要4个单独的if x y + - 约束。
有没有人知道更简单的方法来实现这一目标。
或是x y + - 约束仍然是唯一的方法吗?
提前谢谢你。
答案 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.bottomLeft
,bottomRight
,topLeft
,topRight
)
答案 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()示例有点复杂。如果还有其他问题,请让我知道解释。
祝你好运