(メインページへ)
3.7 ActionScript1.0のメソッドと関数の定義

3.7 ActionScript1.0のメソッドと関数の定義

メソッドと関数の定義

functionを使えばオリジナルのメソッドと関数を定義できます。ActionScript1.0ではメソッド定義と関数定義はフレームアクションかムービークリップのオブジェクトアクションで定義します。
フレームアクションで定義したメソッドや関数は、そのムービークリップの中で自由に利用できます。ムービー全体で使えるようにするにはメインのタイムラインのフレームアクションに定義します。ただし、それを定義したキーフレームが再生されてはじめて利用可能になる点に注意が必要です。これはタイムライン変数のスコープ(有効範囲)と同じ考え方です。

note:
オブジェクト指向プログラミングではメソッドやプロパティをもつクラスを定義し、クラス名と同名の関数(コンストラクタ関数と呼ばれる)を使ってクラスのインスタンスを作ります。その考え方はActionScript1.0またはActionScript2.0であっても基本的には変わりません。ActionScript2.0では、クラス定義ファイル(ASファイル)においてクラスのメソッドや関数を定義します。

個別リンク

メソッド定義

メソッドはfunction文を使って定義します。引数はなくてもかまいませんが()は必要です。

function メソッド名 (引数1, 引数2, ...) {
// 実行するスクリプト
}


次のスクリプトをメインのタイムラインのフレーム1のフレームアクションに書けば、showPhoto()メソッドはタイムラインのどこからでも利用できるメソッドになります。


メインのタイムラインのフレームアクション:
//photoインスタンスで表示するフレームをラベル番号で指定する
function showPhoto(no) {
photolist = ["cat", "dog", "fish"];
if ((no >= 0) && (no < photolist.length)) {
photo = photolist[no];
trace(photo); // 選んだラベル名を出力
}
}

そして、myMCインスタンスをクリックしてshowPhoto()メソッドを実行するには次のようにします。

メインのタイムラインのフレームアクション:
myMC.onPress = function(){
showPhoto(2); //"fish"
}

メインのタイムラインではなく、ムービークリップのタイムラインからこの関数を実行するには_root.showPhoto()のようにパスを使って参照します。
なお、showPhoto()がmyMCインスタンスだけのものならば、次のように直接インスタンスに設定できます。

//インスタンスにメソッドを設定する
myMC.showPhoto = function(no){
photolist = ["cat", "dog", "fish"];
if ((no >= 0) && (no < photolist.length)) {
photo = photolist[no];
trace(photo); // 選んだラベル名を出力
}
}

この場合、showPhoto()を実行する際にはthis.showPhoto(2)またはmyMC.showPhoto(2)のように参照します。

//クリックで実行する
myMC.onPress = function(){
this.showPhoto(2);
}

個別リンク

関数定義

function文の中でreturnアクションを使って値を戻せば、メソッドを呼び出した位置に値を返す関数を定義することができます。引数はなくてもかまいませんが()は必要です。

function 関数名 (引数1, 引数2, ...) {
// 実行するスクリプト
return 返し値
}


次のスクリプトをメインのタイムラインのフレーム1のフレームアクションに書けば、getPrice()関数はタイムラインのどこからでも利用できる関数になります。

//指定の商品に価格を調べる
function getPrice(theName) {
goods = {pen:230, note:450, cap:1600};
price = goods[theName];
return price;
}

getPrice()を使ってnoteの価格を取り出すには次のようにします。

//noteの価格を調べる
x = getPrice("note");
trace(x);

個別リンク

ムービークリップのオブジェクトアクションのメソッドと関数

本書ではオブジェクトアクションは利用しない方針ですが、一応オブジェクトアクションについても簡単に説明しておきます。
インスタンスを選択した状態でアクションを設定するとインスタンスに対して設定されるオブジェクトアクションになります。オブジェクトアクションで定義したメソッドや関数は、そのオブジェクトアクションを設定したインスタンスの中でのみ利用できます。
メソッド定義は、最初に実行されるonClipEvent(load)イベントハンドラで定義します。

インスタンスのオブジェクトアクション:
//初期化する
onClipEvent (load) {
//メソッド定義
function test() {
trace("myTest"); // 出力→ myTest
}
}
//クリックで実行
onClipEvent (mouseUp) {
test();
}

個別リンク

Objectクラスのインスタンスにメソッドを設定する

Objectクラスを利用すればクラス定義を行わずとも手軽にインスタンスを生成できます。先ほどムービークリップのインスタンスに直接メソッドを定義したように、Objectクラスのインスタンスにもメソッドや関数を設定できます。
次のスクリプトではObjectクラスからmyObjインスタンスを作り、testFunc()メソッドを設定しています。


//myObjインスタンスを作る
myObj = new Object();
//メソッドを設定
myObj.testFunc = function() {
trace(123); // 出力→ 123
};
//メソッドをテストする
myObj.testFunc(); //123と出力される

個別リンク