我正在查看Adobe文档here,但目前尚不清楚。
由于我的应用程序出现问题,我想知道是否可能是因为我正在评估两个精灵,一个在舞台上,另一个是创建但没有addChild'ed
答案 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指出这里有些不对劲!