図1●Flashの開発環境に表示されたタイムライン。並んだフレームの上の数字が“時刻”を表す
図1●Flashの開発環境に表示されたタイムライン。並んだフレームの上の数字が“時刻”を表す
[画像のクリックで拡大表示]
表1●ActionScriptプログラムで使える3種類の変数。スコープは変数にアクセスできる範囲を表す
表1●ActionScriptプログラムで使える3種類の変数。スコープは変数にアクセスできる範囲を表す
[画像のクリックで拡大表示]
リスト1●イベント・ハンドラのコードでローカル変数を使ってる例
リスト1●イベント・ハンドラのコードでローカル変数を使ってる例
[画像のクリックで拡大表示]

フォームアプリケーションもムービークリップで構成する

 ムービークリップとタイムラインが「フォームアプリケーション」や「スライドプレゼンテーション」でも使われていることを確認しましょう。Flashを起動したら,「フォームアプリケーション」形式のドキュメントを新規作成してください。そして,開発画面の中央(ステージ)上にある「フォーム1」に右側の[コンポーネント]パネルからButton(ボタン)コンポーネントを一つ配置します。

 次に,画面左側の[スクリーンアウトラインペイン]で「アプリケーション」を選択して画面上部を見てください。「タイムライン」という名前のパネルが表示されていますね(図1[拡大表示])。タイトルバーだけが表示されていてフレームが表示されていないときには,タイトルバーをクリックしてください。

 [タイムライン]パネルを眺めると,最初のフレームに白丸が一つ書かれていることがわかります。次に,[スクリーンアウトラインペイン]で「フォーム1」を選択してみましょう。すると,最初のフレームに今度は黒丸が一つ表示されます。

 タイムラインのフレームは,そのフレームに何のデータも割り当てられていない場合には白丸を,絵やムービーなどのデータが割り当てられている場合には黒丸を表示するようになっています。先ほど「フォーム1」にボタン・コンポーネントを一つ配置しましたから,フォーム1の第1フレームに黒丸が表示されます。「アプリケーション」には何も配置していませんから第1フレームに白丸が表示されたわけです。このことからもわかるように,「アプリケーション」と「フォーム1」はそれぞれ異なるタイムラインを持っています。

 さらに,別々のタイムラインを持っていることから想像できるように,「アプリケーション」や「フォーム1」はFlash上でそれぞれ,一つのムービークリップとして扱われています。それだけではなく実は,ボタン,コンボボックス,リストと言ったFlashが用意しているGUIコンポーネントはすべてムービークリップで,それぞれ独自のタイムラインを持っています。すなわち,Flashではフォームアプリケーションを,アニメーションと同様に,ムービークリップの集まりとして扱っているわけです。

 コンポーネントを使用してアプリケーションを作成する場合,「コンポーネントごとに独自のタイムラインを持っている」ということを知っておいてください。これが以降に説明するActionScript独自の変数「タイムライン変数」を理解するカギになります。

ActionScriptでは3種類の変数を使える

 ActionScriptのプログラムで使用できる変数には,「ローカル変数」「タイムライン変数」「グローバル変数」の3種類があります(表1[拡大表示])。

 ローカル変数はプログラミング経験者にはおなじみでしょう。この変数は任意の関数内のみで有効になります。例えば,リスト1[拡大表示]のようにフォームを読み込んだときに起動するloadイベント・ハンドラで宣言した変数は,ローカル変数となり,このイベント・ハンドラの中でだけ有効です。loadイベントの処理が終了すると破棄されます(カコミ記事「変数は宣言して使うのがオススメ」を参照)。


変数は宣言して使うのがオススメ


図A●データ型を宣言した変数に違った型の値を代入するとエラーになる(青枠を付けたのはシンタックスチェックボタン)
[画像のクリックで拡大表示]

 使いやすさを重要視するスクリプト言語であるActionScriptでは,変数の宣言は必須ではありません。また,変数を宣言する際のデータ型の指定も必須ではありません。このあたりはVB(6.0以前)やVBA(Visual Basic for Applications)と同じです。しかし,バグを防ぐという観点からは,変数とデータ型は宣言して使う方が望ましいでしょう。

 変数の宣言には,varステートメントを使用します。例えば,二つの変数a,bを宣言するには次のようにコードを記述します。

var a, b;

変数のデータ型を指定して変数を宣言するには,変数名の後に「:」(コロン)を記述し,その後にデータ型(クラス名)を記述します。例えば,変数aをString型(文字列),変数bをNumber型(数値)で宣言する場合には次のようにコードを記述します。

var a:String, b:Number;

 データ型を指定して宣言した変数に対して,異なるデータ型の変数を代入しようとすると,エラー・メッセージが表示されます。例えば,[アクション]パネルに以下のように文字列型で宣言した変数aとデータ型を指定しないで宣言した変数bに,「100」という数値を代入するステートメントを記述します。

on load {
var a:String;
var b;
a = 100;
b = 100;
}

この状態で[アクション]パネルの[シンタックスチェック]ボタン(チェック・マークのアイコン)を押します*A。すると,図A[拡大表示]のようなメッセージを出力します。これを読むと,変数aに数値型の値を代入しようとしているためエラーになったとわかります。型指定のない変数bに関しては問題なく動作します。

 データ型を指定しない変数は,どんなデータを代入してもエラーとなりませんから便利なように思えます。しかし,意図しない異なる型の値を知らず知らずに代入してしまい,思わぬ実行時エラーや意図しない動作を招く危険性があります。ほかのプログラミング言語でも言えますが,変数のデータ型はきちんと指定して宣言した方が安全です。

 変数の宣言と初期値の代入は,次のように一つのステートメントで同時に行うことも可能です。

var a:String = "こんにちは";
var b:Number = 100;

つづく…

吉岡 梅(よしおか うめ)
山梨県在住のソフトウエア開発者。

◆下記のURLから,サンプル・プログラムを無償ダウンロードできます
http://software.nikkeibp.co.jp/software/download/down04c.html#200407