プログラムにどこからともなく侵入し、挙動をおかしくさせ、さらにはプログラマのストレスの原因にもなる「バグ」。プログラムの誕生とともに発生した「バグ」をできるだけ簡単に駆除するために、バグの一例を挙げておきます。今回はFlashで使われるActionscriptに関するバグです。(あと、2つほど続けて書きます。)
Actionscriptはその名の通りスクリプト言語です。コンパイルする必要はなく、簡単にテストすることができます。ですが、Flashで使われる関係上、バグの再現性を特定することがけっこう難しいのです。構文エラーならすぐに止まってくれますが、そうでない場合はちょっと厄介です。
まず、多くのスクリプト言語がそうであるように、変数の宣言を行わなくても自動的に解釈してくれる点。これは、わざわざ宣言を書かなくてもいい点は利点とも思われますが、逆に言えばスペルミスで別の変数名を記述しても、とりあえず動いてしまいます。これを特定するのが面倒なんです。
たとえば、こんな場合。
aaa = 12345;
trace(aaaa); // print "Undefined"!!
これが単独で書かれていると分かりやすいですが、長いコードの中ではどうでしょう。見つけるのが大変な気がしませんか?ホントによく起きえるミスなんで、よく気をつけましょう!
あと、actionscriptを勉強したい方は、下記のブログなんかがいいと思いますゝ(^O^)丿
[blog] Flash ActionScript2.0入門ノート
Flashでは、ムービークリップへのパスを記述する方法が2種類用意されています。絶対パスと相対パスです。この2つを使い分けることで、ActionScript の記述が容易になります。
(1)絶対パスについて
まず、絶対パスについてですが、これは基準となるオブジェクトを _root とするパスの記述方法です。絶対パスでは、必ずパスの先頭に「_root」が付きます。これは、_root との位置関係が変わらない場合は非常に有効な記述方法であると言えます。逆に、_root との位置関係が変わる可能性がある場合は不向きなパスの記述方法であるとも言えます。
(2)相対パスについて
次に、相対パスについてですが、これは今スクリプトを記述しているオブジェクトを基準としたパスの記述方法です。パスの先頭に _root が付かない場合は自動的に相対パスで指定されているものとして解釈されます。
一般的に、複雑なスクリプトを書く場合やオブジェクトの位置関係が変わる可能性がある場合は、相対パスで書いた方がいいと言われています。しかし、どちらも使いどころというものがあるので、必ずしも原則にとらわる必要はないかと思います。
ActionScriptでは、スコープ(有効範囲)が全域にわたるような変数を作成したい場合は、以下のように記述します。
_global.variable = val;
実際に使用するときは、「_global」をつけてもつけなくても構いません。ただし、同名のローカル変数が定義されている場合には、そちらが優先されます。このローカル変数と区別する必要があるときには「_global」を変数名の前に書く必要があります。
this.gotoAndPlay(_global.frame);