図1●前号で作ったスロット・ゲーム
図1●前号で作ったスロット・ゲーム
[画像のクリックで拡大表示]
図2●スロット・ゲームの窓のアニメーションを表示させるムービークリップの構成。各フレームに異なる絵柄を描いておく
図2●スロット・ゲームの窓のアニメーションを表示させるムービークリップの構成。各フレームに異なる絵柄を描いておく
[画像のクリックで拡大表示]
図3●scriptレイヤーの5フレーム目を指定したところ
図3●scriptレイヤーの5フレーム目を指定したところ
[画像のクリックで拡大表示]
表1●ActionScriptで利用できる主なデータ型
表1●ActionScriptで利用できる主なデータ型
[画像のクリックで拡大表示]

 前回は,スロット・ゲームの作成を通じて,Flashアニメーションで基本になるタイムラインの仕組みと,アニメーションを制御するために必要なActionScriptの命令を中心に紹介しました。今回は,もう一歩踏み込んで,Flashにおける変数の管理方法や,ifなどプログラム制御のためのステートメントの記述方法について説明します。得点(スコア)の表示機能やリプレイ機能を付加して,ゲームとして仕上げましょう。

 復習をしておきます。前回は,Flashの開発画面であるステージ上に,アニメーションで絵柄がくるくる変わる三つの窓(リール),それぞれの窓のアニメーションを止めるstopボタン,三つの窓のアニメーションを開始するstartボタンを配置しました(図1[拡大表示])。それぞれの窓は5フレームのアニメーションからなるムービークリップです(図2[拡大表示])。三つの窓のインスタンス名は左から順に「reel1」「reel2」「reel3」としました。メインのムービーの5フレーム目には変数定義のほか,アニメーションを開始する関数や停止する関数を記述して,startボタンやstopボタンから呼び出して利用できるようにしましたね。

変数は宣言して使おう

 まずは,このスロット・ゲームに得点を表示させる機能を追加しましょう。それには,得点の値を格納する変数を用意して,絵柄がそろったら変数の値を増加し,絵柄がそろわなかったら変数の値を減少させたらよさそうです。

 ActionScriptのプログラムで変数を扱う場合,varステートメントで変数を宣言します。実はActionScriptでは,宣言せずにいきなり変数を使うこともできます。しかし,変数を宣言した方がプログラムが見やすくなりますから,宣言して使うようにクセをつけておくのが良いでしょう。

 varステートメントのもっとも単純な構文は,

var 変数名;

となります。次のように,データ型(変数に格納する値の型)を指定して宣言することもできます*1

var 変数名:データ型;

ActionScriptで宣言できる代表的なデータ型を表1[拡大表示]に挙げておきます。データ型を指定すると,指定した以外の型のデータを格納しようとするとエラーが発生しますから,プログラミングのミスを発見しやすくなります。

 変数を宣言する際には,「=」(イコール)代入演算子を使って,初期値を指定することも可能です。例えば,数値型の変数としてscoreを宣言し,初期値に0を指定するには

var score:Number = 0;

と記述します。

変数には有効範囲がある

 ActionScriptで扱う変数には,Flashムービー上でその変数を使える範囲,すなわち「スコープ」が存在します。変数を宣言して値を代入しても,スコープを外れた個所からはアクセスできません。

 ActionScriptのスコープには,ローカル変数,タイムライン変数,グローバル変数,の3種類があります。ローカル変数は関数(function)の内部で宣言し,その関数の内部でだけ有効な変数です*2。関数の処理が終わると破棄されます。

 タイムライン変数は,タイムライン上で宣言し,宣言をしたフレーム以降のフレームで有効になる変数です。ムービークリップを中心とした視点で捉えると,タイムライン変数は,「そのムービークリップのインスタンス固有の変数」「そのムービークリップのインスタンス固有のプロパティ」のように考えることができます*3

 グローバル変数は,ムービー内のどこからでもアクセスできる変数です。その実体は,ムービー内のどこからでもアクセスできる特殊なオブジェクトである_globalオブジェクトで管理する変数です。グローバル変数に対しては,varを使った宣言を行いません。識別子_globalに続けて変数名を指定します。例えば,グローバル変数scoreに値として100を格納するには次のように記述します。

_global.score = 100;

 今回は,スロット・ゲームの得点を記録しますから,メインのタイムライン上でタイムライン変数scoreを宣言して使うことにします。前回作成したflashドキュメントのファイルを開いてください*4。メインのタイムラインでscriptと名付けたレイヤーの5フレーム目を選択し(図3[拡大表示]),メニューから[ウィンドウ]-[開発パネル]-[アクション]とたどって(あるいは[F9]キー)[アクション]パネルを開き,冒頭に次のコードを追加します。

//スコアを管理する変数
var score:Number = 100;

これで5フレーム以降で変数scoreを扱えるようになります。

 タイムライン変数を使うときには,その変数を宣言したフレーム(今の場合であれば5フレーム目)が再生されるまで,変数scoreは宣言されていない状態にあることに注意してください。さもないと,宣言して初期化したつもりなのに,実はまだ変数が定義されておらずに予期せぬ処理を実行してしまう,ということも起こり得ます。

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