-1

外部クラスがアタッチされたムービー クリップがあります。これが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 クラス コードのトレースは両方のパラメーターに null を与えますが、MC タイムライン内に (添付されたクラス コードではなく) トレースを配置すると、正しい値が得られます!

nullを取得せずにMCクラス自体から値にアクセスするにはどうすればよいですか?

ありがとうございました。

4

4 に答える 4

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()と、これら 2 つのプロパティが正常にトレースされます。はい、クラスはそのプロパティを読み取ることができます。

于 2012-07-04T12:51:06.463 に答える
0

わかった!

謎を解きました。

2つのトレースを入れました。メイン MC クラスの 1 つは「ねえ、私は MC の中にいる - picFile=」 と言っており、もう 1 つは put 関数で「このファイルを 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。

于 2012-07-05T16:16:29.123 に答える
0

メインクラスで使用する var をpublic static vars にします。

于 2012-07-04T12:48:34.403 に答える
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);
   }
}
于 2012-07-04T13:08:54.120 に答える