0

たとえば、そのクラスを拡張しない場合、別のクラスからカスタムクラスを呼び出すにはどうすればよいですか。

メインの基本クラスにタイマーイベント Base.myTimer.addEventListener(TimerEvent.TIMER, processTime) - 基本クラスがあります

次に、コード Base.mytimer.removeEventListener(TimerEvent.TIMER, processTime. - Base class

処理が完了したときにそのメソッドを再度呼び出したいボタン(Btnクラス)がありますが、メソッドがボタンクラスではなくベースクラスに存在するため、動作させることができないため、フラッシュは明らかに私に与えますエラー processTime が定義されていません。

たとえば、ボタン内からイベントリスナーを再インスタンス化したいので、

Base.myTimer.addEventListener(TimerEvent.TIMER, processTime); または this.parent.parent["myTimer"].addEventListener()

myTimer は Base クラスの静的タイマーです。

Base.myTimer.dispatchEvent(new TimerEvent(TimerEvent.TIMER)) などのカスタム メソッドでない場合は、通常の dispatchEvent を作成できます。

これまでに見た例では、問題は解決していません。どんな助けでも大歓迎です。

4

2 に答える 2

0

ボタン クラスは Base クラスの子ツリーの一部のようです。この場合、クリックされたときにボタンクラスからdispatchEventを実行できます

dispatchEvent(new Event("AddListenerAgain", true));

Base クラスでは、すでにボタン クラスにアクセスできる必要があるため、次のように言えます。

button.addEventListener("AddListenerAgain", addListener);

次に、基本クラスで

private function addListener(e:Event) : void {
 myTimer.addEventListener(TimerEvent.TIMER, processTime);
}

この例では、生の文字列をディスパッチしてリッスンしました。これは推奨される方法ではありません。カスタムイベントを正しくディスパッチする方法を読む必要があります。

于 2013-02-18T08:17:59.577 に答える
0

Base クラスのインスタンスへの参照を Button インスタンスに渡すことができます。

// Button class
package {
    import Base;
    // Other imports...

    public class Button {
        public function Button(base:Base):void {
            // processTime and myTimer must be public.
            // I put this line in the constructor for brevity, but if you stored base 
            // in an instance variable, you could put this anywhere in the button 
            // class.
            Base.myTimer.addEventListener(TimerEvent.TIMER, base.processTime)
        }
    }
}

// Create button like this. 
var button:Button = new Button(base);

// Or if button is created inside of Base
var button:Button = new Button(this);

リスナーを追加および削除するために Base クラスに 2 つのメソッドを作成し、myTimer と processTime を非公開にすることをお勧めします。

public class Base {
    public function addTimerListeners():void {
        myTimer.addEventListener(TimerEvent.TIMER, processTime)
    }

    public function removeTimerListeners():void {
        myTimer.removeEventListener(TimerEvent.TIMER, processTime)
    }
}

次に、クラスの外部からこれら 2 つのメソッドを呼び出すことができます。これにより、クラスの内部動作がより隠されます。myTimer を static 変数ではなくインスタンス変数に変更する場合は、Base クラス以外のコードを変更する必要はありません。これはカプセル化と呼ばれ、良い方法です。

于 2013-02-17T19:49:42.093 に答える