【问题标题】:AS3: How to find the parent of a deep-nested Sprite from the Stage?AS3:如何从舞台中找到深度嵌套的 Sprite 的父级?
【发布时间】:2011-01-21 08:31:41
【问题描述】:

我将对我正在尝试做的事情给出完整的解释。

我有一个视频播放器作为单独的 SWF。在这个视频播放器中,我有一个扩展 Sprite 的 VideoContainer 类,它包含视频和一个带有特定视频按钮的控制栏。

此 SWF 加载到另一个主 SWF 中,该 SWF 有一个位于其他所有内容之上的菜单。当我在视频 SWF 中单击“全屏”时,一切都很顺利,除了菜单仍然位于 VideoContainer 对象的顶部。

我需要一种方法来更改加载的 SWF 的显示顺序,将其放在全屏上的所有其他内容之上,并在全屏关闭时将其更改回来。所有这些都需要在视频播放器中进行。另外,孩子的配置可以改变(视频播放器可以在主SWF的不同地方加载),所以我不能使用某个不变的路径。

我想做类似stage.getUpperMostParentOf(VideoContainer) 的事情。有任何想法吗?谢谢。

【问题讨论】:

    标签: flash actionscript-3 parent-child sprite stage


    【解决方案1】:

    你能再次添加加载的 swf 吗?从您的主要瑞士法郎:

    addChild( menu ); // -- the menu sprite
    addChild( videoSWF ); // -- the loaded swf containing the video player
    

    另一种查找不是舞台的最顶层父级的方法是使用 while 循环“爬上”显示树。

    var container:DisplayObjectContainer = videoContainer.parent;
    while( container.parent != null && containert.parent != stage )
    {
         container = container.parent
    }
    
    trace( 'uppermost parent: ' + parent );
    

    可能有多种方法可以完成你想要的,但如果没有看到你的实际代码,很难确切地知道如何解决这个问题。

    【讨论】:

    • 我试图使用自定义冒泡事件来做到这一点,但您的第二种方法更简单、更清晰。谢谢!
    【解决方案2】:

    我已经这样做了,而且非常直接......来自视频播放器:

    var oldParent:DisplayObjectContainer;
    function goFullscreen() {
        oldParent=parent;
        stage.addChild(this);
        stage.displayState=StageDisplayState.FULL_SCREEN;
        stage.addEventListener(Event.RESIZE, resize);
    }
    
    function resize(e) {
        if(stage.displayState!=StageDisplayState.FULL_SCREEN) {
            stage.removeEventListener(Event.RESIZE, resize);
            oldParent.addChild(this);
        }
    }
    

    【讨论】:

    • 基本上,它应该可以工作,但在我的情况下,我有一些 addToStage、removedFromStage 事件侦听器,它们很可能会搞砸一切。
    猜你喜欢
    • 2012-11-22
    • 1970-01-01
    • 2018-08-17
    • 1970-01-01
    • 1970-01-01
    • 2013-08-22
    • 1970-01-01
    • 1970-01-01
    • 2015-02-20
    相关资源
    最近更新 更多