打印

[AS3] 一个初学者的问题(无法访问空对象引用的属性或方法r)

这是我的类文件代码:
package {
        import flash.display.MovieClip;
        import flash.events.*;
        import flash.display.Loader;
        import flash.net.URLRequest;
        public class Loadswf extends MovieClip {
                private var sudu:Number;
                private var mcs:MovieClip;
                private var loadok:Boolean;
                function Loadswf():void {
                        var mcLoadsoader=new Loader();
                        mcLoads.load(new URLRequest("my_mc.swf"));
                        mcLoads.contentLoaderInfo.addEventListener(Event.COMPLETE,mcload);
                }
                //设置移动的速度
                public function set _sudu(_sudu:Number):void {
                        sudu=_sudu;
                }
                //获取移动的速度
                public function get _sudu():Number {
                        return sudu;
                }
                public function set _xs(_xs:Number):void {
                        mcs.x=_xs;
                }
                public function set _ys(_ys:Number):void {
                        mcs.y=_ys;
                }
                private function MouseDown(event:MouseEvent):void {
                        mcs.startDrag();
                }
                private function MouseUp(event:MouseEvent):void {
                        mcs.stopDrag();
                }
                //plays方法:添加一个帧的监听
                public function plays():void {
                        addEventListener(Event.ENTER_FRAME,xyundong);
                        
                }
                //帧监听触发的函数,实现移动
                private function xyundong(event:Event):void {
                        trace(mcs.x);                        
                        mcs.x+=sudu;                        
                }
                //--------------------------------------------------------->
                private function mcload(e:Event):void {
                        var mc:MovieClip=e.target.content as MovieClip;
                        mcs=mc.my_mc;
                        addChild(mcs);
                        mcs.addEventListener(MouseEvent.MOUSE_DOWN,MouseDown);
                        mcs.addEventListener(MouseEvent.MOUSE_UP,MouseUp);
                        
                }
        }
}

其中my_mc.swf中有个影片剪辑为my_mc,我要控制的就是这个剪辑的x和y属性,还有让它移动的一个方法

这是我fla文件的代码
var my_mcoadswf=new Loadswf();
my_mc._xs=200;
my_mc._ys=10;
addChild(my_mc)
my_mc._sudu=1
my_mc.plays()

为什么我的类实例不能给其属性赋值?提示总是

TypeError: Error #1009: 无法访问空对象引用的属性或方法。
        at Loadswf/set _xs()
        at MyFristClass_fla::MainTimeline/

是什么原因,又该怎么解决!
请各位前辈帮帮小弟我,小弟刚接触AS3

[ 本帖最后由 wsr888 于 2008-5-29 18:01 编辑 ]
因为你设置以下属性的时候
my_mc._xs=200;
my_mc._ys=10;
my_mc._sudu=1
my_mc.plays()

所涉及到的MC并未加载成功,一个没有加载成功的对象,是不能操作的。
http://www.flash023.cn 终极讨厌
谢谢!
我也想过是这样的问题,但是就是想不到怎么去解决它!
谢谢两位的回复!
终于想到如何解决这个问题了!
修改之后无论是在加载完之前还是加载完之后都可以调用其方法和设置其属性了!
代码修改如下:
package {
       import flash.display.MovieClip;
       import flash.events.*;
       import flash.display.Loader;
       import flash.net.URLRequest;
       public class Loadswf extends MovieClip {
              private var sudu:Number;
              private var mcs:MovieClip;
              private var xs:Number;
              private var ys:Number;
              private var playsok:Boolean;
              private var loadok:Boolean;
              function Loadswf():void {
                     var mcLoads:Loader=new Loader();
                     mcLoads.load(new URLRequest("my_mc.swf"));
                     mcLoads.contentLoaderInfo.addEventListener(Event.COMPLETE,mcload);
              }
              //设置移动的速度
              public function set _sudu(_sudu:Number):void {
                     sudu=_sudu;
              }
              //获取移动的速度
              public function get _sudu():Number {
                     return sudu;
              }
              public function set _xs(_xs:Number):void {
                     xs=_xs;
                     //通过loadok判断,加载完后则可调用设置属性函数
                     if (loadok) {
                            setxs(xs);
                     }
              }
              public function set _ys(_ys:Number):void {
                     ys=_ys;
                     //通过loadok判断,加载完后则可调用设置属性函数
                     if (loadok) {
                            setys(ys);
                     }
              }
              private function MouseDown(event:MouseEvent):void {
                     mcs.startDrag();
              }
              private function MouseUp(event:MouseEvent):void {
                     mcs.stopDrag();
              }
              //plays方法:添加一个帧的监听
              public function plays():void {
                     playsok=true;
                     if (loadok) {
                            addEventListener(Event.ENTER_FRAME,xyundong);
                     }
              }
              //帧监听触发的函数,实现移动
              private function xyundong(event:Event):void {
                     mcs.x+=sudu;
              }
              //设置mcs的x值
              private function setxs(xs:Number):void {
                     mcs.x=xs;
              }
              //设置mcs的y值
              private function setys(ys:Number):void {
                     mcs.y=ys;
              }
              //--------------------------------------------------------->
              private function mcload(e:Event):void {
                     loadok=true;
                     var mc:MovieClip=e.target.content as MovieClip;
                     mcs=mc.my_mc;
                     addChild(mcs);
                     mcs.addEventListener(MouseEvent.MOUSE_DOWN,MouseDown);
                     mcs.addEventListener(MouseEvent.MOUSE_UP,MouseUp);
                     //通过playsok判断是否调用plays方法
                     if (playsok) {
                            addEventListener(Event.ENTER_FRAME,xyundong);
                     }
                     //调用设置mcs的x和y属性值的函数
                     setxs(xs);
                     setys(ys);
              }
       }
}

TOP

还在为头像烦恼?还在为不能关注好友动态烦忧?快来蓝色理想家园吧!