从子脚本访问父AS3脚本中的变量

时间:2015-06-16 15:20:38

标签: actionscript-3 variables parent-child parent

我遇到的问题是将父AS3脚本中的变量值传递给父级调用的子swf。

孩子还有一个与之关联的AS3脚本。

这是一个简单的例子。这是父脚本。

package scripts {
            import flash.display.MovieClip;
            import flash.display.*;
            import flash.net.URLRequest;
            import flash.events.MouseEvent;
            import flash.events.Event;

            public class passone extends MovieClip {

                public var topVariable;

                public function passone() {

                    var button: buttonMovie = new buttonMovie();
                    button.x = 300;
                    button.y = 400;
                    button.addEventListener(MouseEvent.CLICK, onButtonClicked);
                    addChild(button);

                    topVariable = "Parent variable";
                }

                function onButtonClicked(e: MouseEvent): void {

                    trace("This is the variable: " + topVariable);
                    var myLoader: Loader = new Loader();
                    var url: URLRequest = new URLRequest("PassVariableTest2.swf");
                    myLoader.load(url);
                    myLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onComplete);
                    //addChild(myLoader);

                    function onComplete(e: Event): void {
                        topVariable = "Parent variable";
                        addChild(myLoader);
                    }
                }
            }
        }

这是父调用的swf的代码。

 package scripts {
        import flash.display.MovieClip;
        import flash.text.TextField;
        import flash.events.Event;

        public class passtwo extends MovieClip {

            var topVariable

            public function passtwo() {

                //var ChildVar = MovieClip(parent.parent).topVariable;

                trace("This is being called");

                trace("The answer should follow: " +MovieClip(this.parent.parent).topVariable);
                //trace(MovieClip(this.parent));
            }
        }
    }

我尝试了几种不同的代码配置来访问父脚本中的变量。

MovieClip(this.parent.parent).topVariable
MovieClip(parent.parent).topVariable
MovieClip(this.parent.parent.parent).topVariable
MovieClip(this.parent).topVariable

我真的可以用一些帮助搞清楚这一点。 我一直收到错误#1009无法访问空对象引用的属性或方法。

1 个答案:

答案 0 :(得分:0)

使用强制转换到MovieClip确实是您可以在互联网上找到的不良做法之一。除了混淆问题之外,它没有任何帮助,因为它基本上只是阻止任何编译时检查发生,因为MovieClip是一个动态类。 从设计的角度来看,您不希望加载的swf文件伸出手并尝试从其他人那里获取内容。 相反,以理想的方式定义行为。如果您的类需要一个值,请创建一个方法,以便将其传递给它。我在这里使用set函数,因此它可以像属性一样使用。 包脚本 {     import flash.display.Sprite;     public class StringReceiver扩展Sprite     {         private var _text:String ="&#34 ;;         公共函数StringReceiver()         {         }         public function set text(value:String):void         {             _text = value;             //在这里用收到的字符串做东西,例如:             迹(_text);         }     } } 如果将其编译为.swf文件并加载它,则将其强制转换为类而不是MovieClip。此外,除非您知道自己在做什么,否则不要将功能嵌套到彼此中。 包脚本 {     import flash.display.Sprite;     import flash.display.LoaderInfo;     import flash.net.URLRequest;     import flash.events.MouseEvent;     import flash.events.Event;     public class Main扩展Sprite     {         private var _message:String =" message&#34 ;;         公共功能Main()         {             var button:buttonMovie = new buttonMovie();             button.x = 300;             button.y = 400;             button.addEventListener(MouseEvent.CLICK,onButtonClicked);             的addChild(按钮);         }         私有函数onButtonClicked(e:MouseEvent):void         {             跟踪("这是变量:" + _message);             var loader:Loader = new Loader();             var url:URLRequest = new URLRequest(" PassVariableTest2.swf");             loader.contentLoaderInfo.addEventListener(Event.COMPLETE,onComplete);             Loader.load方法(URL);             的addChild(装载机);         }         private function onComplete(e:Event):void         {             var loaderInfo:LoaderInfo = e.target as LoaderInfo;             var receiver:StringReceiver = loaderInfo.content as StringReceiver;             receiver.text = _message;         }     } } 另见:http://www.scottgmorgan.com/accessing-document-class-of-externally-loaded-swf-with-as3/