我需要检测 MC2 何时超过 MC1 是否在 MC1 的边界内。为此,我通常会使用 4 个单独的 if xy 约束,不幸的是,我的创作中的 .hitTestObject 似乎也需要 4 个单独的 if xy + - 约束。
有谁知道实现这一目标的更简单的方法。
还是 xy + - 约束仍然是唯一的方法?
先感谢您。
我需要检测 MC2 何时超过 MC1 是否在 MC1 的边界内。为此,我通常会使用 4 个单独的 if xy 约束,不幸的是,我的创作中的 .hitTestObject 似乎也需要 4 个单独的 if xy + - 约束。
有谁知道实现这一目标的更简单的方法。
还是 xy + - 约束仍然是唯一的方法?
先感谢您。
检测两个形状的命中问题的最终解决方案是使用 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() 样本有点复杂。如果还有其他问题,请告诉我解释。
祝你好运
我不知道这样做的内置方法,但是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
)