0

actionscript 3.0 と Flash Professional CS5.5 を使用しています。最初のフレームにないインスタンス オブジェクトで問題が発生しました。最初のフレームはメニューで、2 番目のフレームには TLF テキスト フィールドが含まれています。テキスト フィールドにインスタンス名を付けました。たとえば、「username_txt」とします。ここで、「ステージインスタンスを自動的に宣言する」をオフにして、メインクラスでこれを行うと

 public class MainClass extends MovieClip {

        public var username_txt:TLFTextField;

        public function MainClass() {
            username_txt.text = "anything";
        }
 }

null オブジェクトのプロパティにアクセスしようとしたことを示す実行時エラーが表示されます。(必要なすべてのクラスをインポートしたので、それは問題ではありません)

ただし、テキストを最初のフレームに正しく配置すると、これは発生しません。

何か助けはありますか?

前もって感謝します

4

1 に答える 1

1

フレームにまだ到達していないため、テキスト フィールドはまだインスタンス化されていないため、このタスクを実行するエレガントな方法があるかどうかはわかりません。

おそらく、より良いモデルは、データ モデルをビューから分離することです。

データを格納するシングルトン クラスを作成します。

package
{

    public class ApplicationModel
    {

        /** Singleton instance. */
        private static var instance:ApplicationModel = new ApplicationModel();

        /** Return singleton instance. */
        public static function getInstance():ApplicationModel
        {
            return instance;
        }

        /** Data Model */
        public var username:String;

        /** Constructor as singleton enforcer */
        public function ApplicationModel()
        {
            if (instance)
                throw new Error("ApplicationModel is a singleton and can only be accessed through ApplicationModel.getInstance()");
        }

    }
}

次に、キーフレームやクラスなどの任意の場所から、次のいずれかとして実装されたオブジェクトのインスタンスを取得できます。

ApplicationModel.getInstance().username = "test";

または、より良い方法は次のとおりです。

var applicationModel:ApplicationModel = ApplicationModel.getInstance();
applicationModel.username = "test";

あなたの例に従って:

public class MainClass extends MovieClip {

    public var username_txt:TLFTextField;

    public function MainClass() {
        ApplicationModel.getInstance().username = "anything";
    }
}

次に、TLFTextField を更新する必要があるフレーム (フレーム 2 のフレーム スクリプト) で、モデルに基づいてテキストを設定します。

username_txt.text = ApplicationModel.getInstance().username

ビューは必要に応じて常に更新されます。

于 2012-07-05T04:42:43.177 に答える