我正试图在两幅画布上测试裁剪。两幅画布均为100px宽。它们相距20px。我在其中放置了一个标签,使其宽200px。滚动条将显示在画布上。当我没有内部标签并使用hitTestObject时,它返回false。当我将标签放入其中时,返回true。有没有办法改变带有标签的画布,这样它就不会扩展到标签的宽度?
<?xml version="1.0" encoding="utf-8"?>
private function init() : void {
var hitBox:Sprite = new Sprite;
hitBox.graphics.drawRect(box1.x, box1.y, 100, 100);
box1.hitArea = hitBox;
box1.mouseEnabled = false;
trace('box hit area: ' + box1.getBounds(box1));
trace('hitbox: ' + hitBox);
trace('box hit test: ' + box1.hitTestObject(box2));
}
]]>
</mx:Script>
<mx:Canvas id="box1" x="10" y="10" width="100" height="100" backgroundColor="#FFFFFF">
<mx:Label text="This is a test" width="200" />
</mx:Canvas>
<mx:Canvas id="box2" x="120" y="10" width="100" height="100" backgroundColor="#FFFFFF" />
答案 0 :(得分:0)
不幸的是,看起来你不能用hitTestObject
完成你想要的任务。我在你的画布上设置了clipContent
和horizontalScrollPolicy
属性,没有用。我认为正在发生的是hitTestObject
认为你的画布与最长的子组件一样宽,无论是否有任何剪辑蒙版或滚动条。
你被迫使用hitTestObject
吗?如果没有,我建议您按照以下方式编写自己的碰撞检测功能:
public static function componentsCollide( obj1:DisplayObject, obj2:DisplayObject ):Boolean {
var bounds1:Rectangle = new Rectangle( obj1.x, obj1.y, obj1.width, obj1.height );
var bounds2:Rectangle = new Rectangle( obj2.x, obj2.y, obj2.width, obj2.height );
return bounds1.intersects( bounds2 );
}