繁体   English   中英

如何从加载的swf访问父movieclip的变量

[英]How to access parent movieclip's variable from loaded swf

我有一个加载外部swf的swf。 加载器swf有一个我想从加载的swf访问的变量。 我使用MovieClip(parent.parent).myVar但它返回此错误

TypeError:错误#1009:无法访问空对象引用的属性或方法。 at card01_fla :: MainTimeline / frame1()

加载器swf有一个自定义文档类,我认为这是问题。

提前致谢。

编辑

这是主要的SWF

    package 
{
    import flash.display.Loader;
    import flash.display.Sprite;
    import flash.events.Event;
    import flash.events.MouseEvent;
    import flash.net.URLRequest;
    import flash.text.TextField;

    /**
     * ...
     * @author chchrist
     */
    public class CardSender extends Sprite 
    {

        private var loader:Loader;
        private var viewButtonArray:Array;
        private var sendButtonArray:Array;
        private var cardContainer:Sprite;

        public var testVar:String

        public function CardSender() {

            testVar = "it worked!!!";
            init();
        }

        private function init() {
            viewButtonArray = [cardsenderMC.view01, cardsenderMC.view02, cardsenderMC.view03, cardsenderMC.view04];

            for each( var viewButton in viewButtonArray) {
                viewButton.buttonMode = true;
                viewButton.addEventListener(MouseEvent.CLICK, onViewClick);
            }
        }

        private function onViewClick(e:MouseEvent):void {
            var cardName = "card"+e.target.name.substring(4)+".swf";
            loader = new Loader();
            loader.load( new URLRequest(cardName));
            loader.contentLoaderInfo.addEventListener(Event.INIT, onCardInit);
        }

        private function onCardInit(e:Event):void {
            addChild(loader);
            var content:* = loader.content;
            content.closeButton.addEventListener(MouseEvent.CLICK, onCloseClick);
        }

        private function onCloseClick(e:MouseEvent):void {
            removeChild(loader);
        }

    }
}

我试图使用此代码从加载的swf访问测试变量

trace(MovieClip(parent.parent).testVar);

编辑#2

如果我addChild(loader)不在onCardInit但在onViewClick和加载的swf的第一帧中我有Object(parent.parent).testVar它工作...但为什么它不想在onCardInit内功能?

parent.parent是错误的。 尝试使用:

MovieClip(MovieClip(e.currentTarget.parent).parent).myVar ;

你必须将第一个父类转换为某个类,如MovieClip,然后获取这个新的MovieClip的父级,然后获取内部变量。

您只有一个loader变量,并且您正在创建四个Loader实例并将它们分配给它 - 因此,如果您快速连续单击它们中的所有四个,则loader变量将有效地包含与最后一次单击相对应的Loader对象。 所有addChild调用都将作用于同一个Loader对象 - 其他对象不会被添加,其父对象将继续为null

对代码进行以下更改:

private function onCardInit(e:Event):void 
{
    addChild(LoaderInfo(e.currentTarget).loader);
    var content:DisplayObject = loader.content;
    trace(content);
    trace(content.closeButton);
    content.closeButton.addEventListener(MouseEvent.CLICK, onCloseClick);
}

private function onCloseClick(e:MouseEvent):void 
{
    trace(e.currentTarget);//should be the closeButton
    trace(e.currentTarget.parent);//should be the loaded swf
    trace(e.currentTarget.parent.parent);//should be the Loader object that loaded it

    //The following will work only if last three traced correctly
    removeChild(e.currentTarget.parent.parent);
}

回答问题中的以下更新:

如果我在onViewClick而不是onCardInit中添加了addChild(loader) ,那么加载的swf的第一帧中的Object(parent.parent).testVar就可以了。 如果我在onCardInit函数中添加addChild,为什么它不起作用?

同样,这可能是因为您要添加不同的loader对象 - 您是否单击了多个视图按钮? 单击视图按钮并等待它加载以查看它是否正常工作。

尝试跟踪parent和parent.parent,我确定这是因为一个adiffal“parent”

loader.content不是movieclip,因此它没有相同的功能。 尝试

myLoadedClip:MovieClip = MovieClip(loader.content);

然后你的myLoadedClip.parent.myVar应该出现

您可能希望您的处理程序在Event.COMPLETE上而不是在Event.INIT上触发

这个加载的swf中的唯一行代码解决了它! ;)

影片剪辑(影片剪辑(parent.parent).root).play();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM