開発が便利になるアクションスクリプトについて
一度だけ初期化したい(Flash 6 以降)
サンプルをダウンロード
■ムービークリップを1度だけ初期化する
ムービークリップのタイムライン 1 フレーム目にのみ記述できます。
#initclip ~ #endinitclip
…の中に記述されたアクションスクリプトは 1 度実行されると、再生ヘッダが再び 1 フレーム目に移動しても 2 回目以降は実行されません。
変数を作成する
#initclip
var value0 = 0;
var value1 = 0;
var value2 = 0;
#endinitclip
変数をプリントデバッグしたい
サンプルをダウンロード
■変数に格納されたデータを調べる
開発中は、プログラムが意図した通りに動作するか、変数に正しい値が格納されたか気になるところです。
そんなときは、trace() 関数を使用するとお手軽に調べる事ができます。
trace() 関数の引数に変数や文字列をセットすると Adobe Flash の出力パネルに「変数に格納されたデータ」やメッセージを表示する事ができます。
この関数は書き出しプレビュー時の デバッグ版 Flash Player で動作します。
変数の中身を調べる例です。
変数を複数指定してプリントデバッグする
var num = 123;
var str = "表示テスト";
var ary = ["a","b","c"];
trace (num);
trace (str);
trace (ary);
メッセージを表示する例です。
メッセージを表示する
var i = 0;
if(i == 0){
trace ("結果は真です。");
}else{
trace ("結果は偽です。");
}
■ trace() 関数を無効化する
trace() 関数を無効化するには、
パブリッシュ設定にある「Traceアクションを省略」にチェックを付けます。
このチェックが付いている場合、書き出された swf ファイルに trace 関数を呼び出す処理が取り除かれます。
リリース用の swf ファイルを書き出す場合は忘れずに付けましょう。
アクションスクリプトを外部に置きたい
サンプルをダウンロード
■アクションスクリプトを Adobe Flash の外に出してみよう
Adobe Flash 8 以前のアクションスクリプトエディタは、プログラムが長くなるとすぐに重くなりがちです。
そんなときは、アクションスクリプトを外部のテキストファイルに記述することで回避できます。
自分が使い慣れているテキストエディタを使って編集する事ができます。
ただし、Adobe Flash のスクリプトの入力支援が使えなくなるのでアクションスクリプトを組みなれている人向けです。
1.アクションスクリプトファイルを作成する
テキストファイルを作成してアクションスクリプトを記述します。
テキストファイルの拡張子は *.as にしておきます。これをアクションスクリプトファイルと呼びます。実際はどんな拡張子でもかまいません
2.外部にあるアクションスクリプトファイルをインクルードする
ASファイルをアクションパネル側で取り込むためには include 命令文を使用します。
#include "ファイル名" と記述すると、書き出し時に、アクションスクリプトファイルの中身が読み込まれてコンパイルされ、swf ファイルとして書き出されます。
test.as ファイルをインクルードする
#include "test.as"
また相対パスでファイル名を指定すれば、別のディレクトリにあるアクションスクリプトファイルをインクルードすることもできます。
ASファイルの中でさらに別のパスをインクルードした場合は、Flash ファイルからの相対参照となります。
../as/test.as にあるアクションスクリプトファイルをインクルードする
#include "../as/test.as"
変数がどんな型なのかを調べたい
サンプルをダウンロード
■変数の型を調べる
変数に格納されたデータの型を調べたい場合は、typeof() 関数を使用します。
Boolean、Number、String、MovieClip、Function などの判別ができます。
Array、Button、Textfield などは Object 扱いとなり判別できません。
| データ | 表示される文字列 |
| Boolean | "boolean" |
| Number | "number" |
| String | "string" |
| MovieClip | "movieclip" |
| Object | "object" |
| Button | "object" |
| TextField | "object" |
| Function | "function" |
データの型を調べる
var v = 123;
trace(typeof(v));
データの型を調べる
var s = "str";
trace(typeof(s));
データの型を調べる
_root.createEmptyMovieClip("mc",0);
trace(typeof(_root.mc));
データの型を調べる
var obj = new Object();
trace(typeof(obj));
データの型を調べる
var func = function(){};
trace(typeof(func));
if文を使って一括コメントアウトする
■書き出しの最適化を利用する
Flash を書き出すと、アクションスクリプトの文字列がコンパイルされ、
Flash Player 上で動作するバイトコードに変換されます。
その変換中に一部のアクションスクリプトの記述が最適化されます。
例えば、以下のように定数のみで演算を記述した場合、書き出されたバイトコードはすでに計算済みの状態となります。
定数で演算を記述する
var v = 1 + 2 + 3 * 4;
最適化された状態(イメージ図です)
var v = 15;
また、if 文の条件式に定数を記述すると、if 文自体が省略されます。
定数で if 文を記述する
if(0){
var a = 0;
}else{
var b = 0;
}
最適化された状態(イメージ図です)
var b = 0;
この if 文の最適化を利用すると、コメントアウトの変わりとして使用できます。
if 文としても機能するので、デバッグ用とリリース用の書き出しを切り替えるといった用途に使えそうです。
最適化を利用してコメントアウトとして使用する
// デバッグ時は 0、リリース時は 1 に変更する
if(0){
trace("リリース用の処理です。")
}else{
trace("デバッグ用の処理です。")
}
実際に最適化されているかを調べたいときは、デバッガを起動してブレイクポイントて中断後、「ステップイン」で1つずつ進めてみましょう。
if文に差し掛かったときに比較文で停止せずにさらに次のステップまで1度にジャンプした場合は、最適化により省略されている事がわかります。
if 文の比較文には、定数を指定する必要があります。変数を指定すると最適化されません。
また関数の宣言については注意が必要です。if 文の中で関数を宣言しても実際に使用する事はできません。動的に関数を作成した場合は使用可能です。


