使用hitTestObject进行Flex碰撞测试

时间:2009-08-14 04:58:31

标签: flex actionscript-3

我正试图在两幅画布上测试裁剪。两幅画布均为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" />

1 个答案:

答案 0 :(得分:0)

不幸的是,看起来你不能用hitTestObject完成你想要的任务。我在你的画布上设置了clipContenthorizontalScrollPolicy属性,没有用。我认为正在发生的是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 );
}