影片剪辑类参数为null

时间:2012-07-04 12:44:59

标签: actionscript-3 class parameters

我有一个附加了外部类的影片剪辑。 这是MC代码(我只是为相关部分缩短了它......)

package  {

    //all the imports here...


    public class mc_masterChapter extends MovieClip {

        public function mc_masterChapter() {
            trace (picFile,strChapTitle);
        }



        //Properties 
        public var picFile:String; 
        public var strChapTitle:String;

    }
}

在主类文件中,我使用addChild将此对象添加到舞台:

var masterChapter:mc_masterChapter = new mc_masterChapter;

masterChapter.picFile = "pic_Chap1.jpg";
masterChapter.strChapTitle = "ABCD:

addChildAt(masterChapter,1);

现在,MC类代码中的跟踪为这两个参数提供了空值,但如果我在MC时间轴内放置一条跟踪(而不是附加的类代码),它会给出正确的值!

如何在不获取nuls的情况下访问MC类本身的值?

谢谢。

4 个答案:

答案 0 :(得分:1)

有效!让我解释一下:

var masterChapter:mc_masterChapter = new mc_masterChapter; // Calls class constuctor
                                                           // so calls trace() too!
                                                           // You will get null null

masterChapter.picFile = "pic_Chap1.jpg"; // Assign the variables
masterChapter.strChapTitle = "ABCD";     // so they can be read

trace(masterChapter.picFile, masterChapter.strChapTitle); // Should trace pic_Chap1.jpg ABCD

如果您在课程中添加以下方法:

public function test():void {
    trace(picFile, strChapTitle);
}

然后调用masterChapter.test()它将成功跟踪这两个属性。所以,是的,该课程可以阅读其属性。

答案 1 :(得分:0)

制作您在主要课程public static var中使用的变种。

答案 2 :(得分:0)

可能更好的解决方案是使用getter / setter对,这样你就可以知道属性设置的确切时刻:

protected var _picFile:String:

public function get picFile():String {
   return _picFile;
}

public function set picFile(value:String):void {
   if (value != _picFile) {
     _picFile=value;
     trace('picFile set to', _picFile);
   }
}

答案 3 :(得分:0)

OK!

我解开了这个谜。

我放了两条痕迹。主要MC课程中的一个说“嘿,我在MC里面 - picFile =” 函数中的一个函数说“我将这个文件放入picFile:”

这就是我所拥有的:

  嘿,我在MC里面 - picFile = null

     

我将此文件放入picFile:image.jpg

得到了它!?!此刻我让他生了一个MC的实例(甚至在把它放到舞台上之前 - 只是定义了对象(用这一行:):

var masterChapter:mc_masterChapter = new mc_masterChapter;

它已经运行了这个类,所以当然在这个阶段,参数没有全部定义,并且 null

定义代码就在该行之后(在main.as中)

masterChapter.pic="pic_Chap1.jpg";

所以我做的是将所有代码从MC对象的主类移动到名为init()的同一个包中的公共函数。然后我从父主类手动调用此函数。 由此可以决定何时调用它(在我声明所有参数之后)。

就是这样。

上帝躲在小细节中:) tnx为所有助手。