加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

actionscript-3 – 如何从加载的swf访问父movieclip的变量

发布时间:2020-12-15 07:28:43 所属栏目:百科 来源:网络整理
导读:我有一个加载外部swf的swf.加载器swf有一个我想从加载的swf访问的变量.我使用MovieClip(parent.parent).myVar但它返回此错误 TypeError: Error #1009: Cannot access a property or method of a null object reference. at card01_fla::MainTimeline/frame1(
我有一个加载外部swf的swf.加载器swf有一个我想从加载的swf访问的变量.我使用MovieClip(parent.parent).myVar但它返回此错误

TypeError: Error #1009: Cannot access a property or method of a null object reference.
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(加载器)不在onCardInit但在onViewClick和加载的swf的第一帧中我有Object(parent.parent).testVar它工作…但为什么它不想在onCardInit内功能?

解决方法

您只有一个加载器变量,并且您正在创建四个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);
}

回答问题中的以下更新:

If I addChild(loader) in the onViewClick instead of onCardInit,then Object(parent.parent).testVar in the first frame of the loaded swf works. Why doesn’t it work if I addChild inside the onCardInit function?

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读