Flash CS3 ドキュメンテーション |
|||
| ActionScript 2.0 の学習 > イベントの処理 > Delegate クラスの使用 | |||
Delegate クラスを使用すると、特定のスコープ内で関数を実行できます。このクラスは、同じイベントを 2 つの異なる関数に送り出すことや (『ActionScript 2.0 コンポーネントガイド』を参照)、関数をそれが属しているクラスのスコープ内で呼び出すことを可能にするために用意されています。
関数をパラメータとして EventDispatcher.addEventListener() に渡すと、渡した関数は、それが宣言されているオブジェクトのスコープではなく、ブロードキャスターコンポーネントインスタンスのスコープで呼び出されます (『ActionScript 2.0 コンポーネントガイド』を参照)。関数を、それが宣言されているオブジェクトのスコープで呼び出すには、Delegate.create() を使用します。
次の例では、Button コンポーネントインスタンスのイベントをリッスンする 3 種類の方法を示します。それぞれの方法で Button コンポーネントインスタンスにイベントリスナーを追加すると、それぞれ別のスコープにイベントが送り出されます。
ステージへのボタンインスタンスの追加および配置は ActionScript を使用してこの後の手順で行います。
import mx.controls.Button;
import mx.utils.Delegate;
function clickHandler(eventObj:Object):Void {
trace("[" + eventObj.type + "] event on " + eventObj.target + " instance.");
trace("\t this -> " + this);
}
var buttonListener:Object = new Object();
buttonListener.click = function(eventObj:Object):Void {
trace("[" + eventObj.type + "] event on " + eventObj.target + " instance.");
trace("\t this -> " + this);
};
this.createClassObject(Button, "one_button", 10, {label:"One"});
one_button.move(10, 10);
one_button.addEventListener("click", clickHandler);
this.createClassObject(Button, "two_button", 20, {label:"Two"});
two_button.move(120, 10);
two_button.addEventListener("click", buttonListener);
this.createClassObject(Button, "three_button", 30, {label:"Three"});
three_button.move(230, 10);
three_button.addEventListener("click", Delegate.create(this, clickHandler));
上記のコードは 6 つのセクションに分けられています (各セクションは空白行で区切られています)。最初のセクションでは、Delegate クラスとともに (Button コンポーネントの) Button クラスが読み込まれます。コードの 2 番目のセクションでは、ユーザーがボタンをクリックしたときに呼び出される関数が定義されています。コードの 3 番目のセクションでは、イベントリスナーとして使用するオブジェクトを作成しています。このオブジェクトはイベント click をリッスンします。
コードの残りの 3 つのセクションでは、ステージに新しい Button コンポーネントを作成し、インスタンスの位置を変更し、click イベントに対するイベントリスナーを追加しています。最初のボタンは click イベントに対するイベントリスナーを追加し、click ハンドラ関数に参照を直接渡します。2 番目のボタンは click イベントのイベントリスナーを追加し、リスナーオブジェクトへの参照を渡します。このリスナーオブジェクトには click イベントのハンドラが含まれています。最後に、3 つめの関数では click イベントのイベントリスナーを追加し、Delegate クラスを使って this スコープ (ここで this は _level0) の click イベントを送り出し、click ハンドラ関数に参照を渡します。
[click] event on _level0.one_button instance.
this -> _level0.one_button
one_button インスタンスをクリックすると、this スコープはボタンインスタンスそのものを参照します。
[click] event on _level0.two_button instance.
this -> [object Object]
two_button インスタンスをクリックすると、this スコープは buttonListener オブジェクトを参照します。
[click] event on _level0.three_button instance.
this -> _level0
three_button インスタンスをクリックすると、this スコープは Delegate.create() メソッド呼び出しで指定されたスコープを参照します。ここでは _level0 です。
このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート
現在のページ: http://livedocs.adobe.com/flash/9.0_jp/main/00000848.html