0

我有一个 .swf 文件,其中包含我从 URL 加载的圆圈,制作成影片剪辑并将其添加到舞台。

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

    //
    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 没有区别。任何想法为什么会这样?

4

1 回答 1

0

我早些时候写了一篇非常简短的博客文章,所以我有它以备将来使用......

好像您正在查看 AFAIK 是对象的全局 x 坐标的 stageX。

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)”

于 2012-12-11T15:03:46.777 回答