hitTestPoint()shapeFlag不适用于包含加载的swf的movieClip

时间:2012-12-09 11:55:27

标签: actionscript-3 flash actionscript

我有一个.swf文件,其中包含我从网址加载的圈子,制作成movieClip并将其添加到舞台。

我希望能够检测到用户何时将光标放在圆圈上。我希望它在某种意义上是准确的,它不仅仅使用圆的边界框,而是实际的圆圈本身来检测碰撞。这是我当前代码的一个片段:

    //
    var myCircle:MyCircle = new MyCircle(swf);
    myCircle.addEventListener(MouseEvent.MOUSE_MOVE, onMouseMove);
    myContainer.addChild(myCircle);
    //

    private function onMouseMove(event:MouseEvent):void
    {
        var glowFilter:GlowFilter = new GlowFilter();
        glowFilter.color = 0xffffff;
        if (event.currentTarget is MyCircle) {
            var object:MyCircle = event.currentTarget as MyCircle;
            if(object.hitTestPoint(event.stageX, event.stageY, true))
                event.currentTarget.filters = [glowFilter]; 
            else
                event.currentTarget.filters = []; 
        }
    }

我被认为shapeFlag方法的hitTestPoint()参数会执行此操作,但将其设置为true或false不会产生任何影响。任何想法为什么会这样?

1 个答案:

答案 0 :(得分:0)

我之前撰写了一篇关于此篇文章的非常简短的文章,所以我以后会这样做...

看起来你正在看stageX,AFAIK是对象的全局x坐标。

http://messer1024.blogspot.se/2012/06/proper-hittest-in-as3.html

短文的简短版本:

在AS3中处理命中测试的许多丑陋尝试后,我终于设法解决了我想要的问题。我忘记考虑的是使用全局鼠标坐标。

public function hitTestMouse(hitarea:DisplayObject):Boolean {
    return hitarea.hitTestPoint(hitarea.stage.mouseX, hitarea.stage.mouseY, true);
}

最后一个参数(shapeFlag)将决定是否在命中测试中检查鼠标悬停在上方的任何实际形状。


所以为了让你的东西工作,你可能应该让它更容易并添加我的功能,然后当你想测试它时运行“hitTestMouse(myCircle)”