hitTestObject方法是否要求测试对象在舞台上?

时间:2012-03-09 19:34:16

标签: actionscript-3 flash

我正在查看Adobe文档here,但目前尚不清楚。

由于我的应用程序出现问题,我想知道是否可能是因为我正在评估两个精灵,一个在舞台上,另一个是创建但没有addChild'ed

1 个答案:

答案 0 :(得分:1)

实际上,答案取决于您定位的平台。在 FlashPlayer 中, hitTestObject 只检查对象的边界框是否重叠,只要您拥有正确的x和y位置以及对象的正确宽度和高度即可你不需要它们实际上在舞台上。

然而,在 AIR 中,可能正在进行某种代码优化,如果其中一个对象实际上不在舞台上,则会返回false

让我们稍微修改文档中的示例,只删除一个addChild:

import flash.display.Shape;

var circle1:Shape = new Shape();
circle1.graphics.beginFill(0x0000FF);
circle1.graphics.drawCircle(40, 40, 40);
//addChild(circle1);

var circle2:Shape = new Shape();
circle2.graphics.beginFill(0x00FF00);
circle2.graphics.drawCircle(40, 40, 40);
circle2.x = 50;
addChild(circle2);

var circle3:Shape = new Shape();
circle3.graphics.beginFill(0xFF0000);
circle3.graphics.drawCircle(40, 40, 40);
circle3.x = 100;
circle3.y = 67;
addChild(circle3);

trace(circle1.hitTestObject(circle2)); 
trace(circle1.hitTestObject(circle3));
trace(circle2.hitTestObject(circle3));

在FP10中我们得到以下输出:

true
false
true

然而,在AIR中我们得到:

false
false
true

关键区别在于circle1和circle2之间的hitTestObject在AIR中为false,因为circle1尚未添加到舞台中,但是在FlashPlayer中无论如何都是真的。感谢@ user1113426指出这里有些不对劲!