На самом деле ответ зависит от того, на какую платформу вы ориентируетесь.В 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
Ключевым отличием является то, что hitTestObject между circle1 и circle2 имеет значение false в AIR, поскольку circle1 не был добавлен на сцену, но в FlashPlayer в любом случае имеет значение true.Спасибо @ user1113426 за указание, что здесь что-то не так!