首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MovieClip中单击AS3外部事件

在MovieClip中单击AS3外部事件
EN

Stack Overflow用户
提问于 2011-09-30 17:36:00
回答 5查看 6.2K关注 0票数 0

是否有任何方法检测用户是否在MovieClip?之外单击?

例如,我需要检测它来关闭先前打开的菜单(如菜单栏样式:文件、版本、工具、帮助等)。

我怎样才能发现这类事件?谢谢!

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-09-30 17:50:07

添加一个侦听器到舞台,并检查stage是否是事件的目标。

这里的代码示例:http://wonderfl.net/c/eFao

代码语言:javascript
复制
package
{
    import flash.display.Sprite;
    import flash.events.MouseEvent;

    public class FlashTest extends Sprite
    {

        private var _menu : Sprite;

        public function FlashTest()
        {
            _menu = new Sprite();
            _menu.x = 100;
            _menu.y = 100;
            _menu.alpha = 0.5;

            with(_menu.graphics)
            {
                beginFill(0xFF0000, 1);
                drawRect(0, 0, 300, 300);
                endFill();
            }

            addChild(_menu);

            _menu.addEventListener(MouseEvent.CLICK, onClickHandler);
            stage.addEventListener(MouseEvent.CLICK, onClickHandler);

        }

        private function onClickHandler(event : MouseEvent) : void
        {
            switch(event.target)
            {
                case _menu:
                    _menu.alpha = 0.5;
                    break;

                case stage:
                    _menu.alpha = 1;
                    break;
            }

        }

    }

}
票数 5
EN

Stack Overflow用户

发布于 2011-09-30 17:44:38

可以将侦听器添加到根元素的click事件:

代码语言:javascript
复制
MovieClip(root).addEventListener(MouseEvent.CLICK, clickObject);

然后,在函数clickObject中,您可以检查所单击的内容。

代码语言:javascript
复制
function clickObject(e:Event):void
{
    var hoverArray:Array = MovieClip(root).getObjectsUnderPoint(new Point(stage.mouseX, stage.mouseY));
    var hoverOverObject:* = hoverArray[hoverArray.length - 1];
}

hoverOverObject引用您要单击的元素。通常这将是电影剪辑中的形状,所以您需要查看它的父母,然后将其与您的电影剪辑进行比较。如果单击没有在下拉电影剪辑上,则触发关闭。

票数 3
EN

Stack Overflow用户

发布于 2011-10-01 10:01:56

代码语言:javascript
复制
var container:MovieClip = new MovieClip();
var mc:MovieClip = new MovieClip();
with(mc.graphics){
    beginFill(0xff0000,1);
    drawCircle(0,0,30);
    endFill();
}
mc.name = "my_mc";
container.addChild(mc);
addChild(container);
stage.addEventListener(MouseEvent.CLICK, action);
function action (e:MouseEvent):void 
{
    if(e.target.name != "my_mc"){
        if(container.numChildren != 0)
        {
            container.removeChild(container.getChildByName("my_mc"));
        }
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7613968

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档