今回はクラススタイルでの制作の2回目です。前回は、2つのシーン間を遷移し、シーンに表示オブジェクトを貼りつけ、外部リンクの設定を行いました。今回は、「動物の写真一覧のページ」と「動物の詳細ページ」を作成して、サイトを完成させます。
サイト制作
それでは、前回と同じようにFlashDevelopでプロジェクト[Project_gihyo]を開いて、制作をすすめていきましょう。
1.子シーンの作成
まず、「動物の写真一覧のページ」を作成していきます。このシーンは、前回制作した「サイトについての説明ページ」と構造が同じになっています。「AboutScene」クラスと同じように、プロジェクト内の[template]→[MySceneObject.as]を、[src]→[scenes]の中にコピーしてください。そして、コピーしたファイルのファイル名、クラス名、コンストラクタ名を「GalleryScene」に修正し、パッケージ名を「scenes」にします。
次にシーン同士を繋げる作業を行います。子シーンである「GalleryScene」シーンも親シーンである「IndexScene」シーンの下につくので、インスタンスを生成して「name」を設定し、「addScene()」メソッドで繋げましょう。「IndexScene」クラスを開いてください。
これで「GalleryScene」シーンをルートシーンの「IndexScene」シーンに繋ぎました。
2.ボタンの作成
ボタンの作成も前回と同じです。プロジェクト[Project_gihyo]の[template]→[MyCastButton.as]を、[src]→[ui]の中にコピーします。コピーしたファイルのファイル名、クラス名、コンストラクタ名を「GalleryButton」に、パッケージ名を「ui」にそれぞれ修正してください。
作成した「GalleryButton」クラスを開いてください。「GalleryScene」シーンに遷移させるため、コンストラクタ内にある「sceneId」プロパティを設定します。「SceneId」コンストラクタの引数には遷移先のシーンを表すシーンパスが必要になるので、以下のように設定します。
作成したボタンを表示させましょう。「IndexScene」クラスを開いてください。「GalleryButton」クラスのインスタンスを生成し、座標を設定します。次にイベント「atSceneLoad」内で、ボタンの表示を設定しましょう。忘れずにインポートも行ってください。
ボタンの表示も完了したので、ここで一度ムービーを書き出して確認しましょう。ムービーを書き出したら「GalleryButton」ボタンをクリックし、「GalleryScene」シーンに遷移することを確かめてください。
「GalleryButton」ボタンをクリックすると、「IndexScene」シーンから「GalleryScene」シーンに遷移しているのが確認できます。また、「GalleryScene」シーンと「AboutScene」シーン間でも移動できることが確認できます。
3.表示オブジェクトの設定1
次に、何も表示されていない「GalleryScene」シーンにオブジェクトを表示させます。「GalleryScene」クラスを開き、「GalleryPage」(※1)の型で変数「gallerytPage」を宣言してください。続けて、コンストラクタ内でインスタンスを生成し、座標を設定します。イベント「atSceneLoad」内の「addCommand()」メソッドで「AddChild」コマンドを使用し、画面に表示させます。「AboutScene」シーンの時と同様に、「DoTweener」コマンドを使用します。複数のコマンドを設定する際は、間にカンマ(,)を入れてください。また、「GalleryScene」シーンから他のシーンに遷移した際は、「GalleryPage」インスタンスを表示リストから削除するので、「asSceneUnload」イベント内に削除処理を設定します。
設定が完了したら、ムービーを書き出して確認しましょう。
「GalleryButton」ボタンを押し、「GalleryScene」シーンに遷移すると、「GalleryPage」インスタンスが表示されます。
4.子シーンの作成
続いて、「GalleryScene」シーンの下の階層に付くシーンを作成します。サンプルサイトでは、まだ設置していませんが、「動物の写真一覧のペー ジ」にある動物の写真をクリックすると「動物の詳細ページ」に遷移するようにします。その遷移先のシーンを先に作成していきます。
作成するシーンは3つです。全て同じ手順になります。[template]→[MySceneObject.as]を[src]→[scenes]へ3つコピーしてください。コピーしたファイル名、クラス名、コンストラクタ名をそれぞれ、「AmericanScene」「FrenchScene」「MameScene」(※2)に修正してください。その際、パッケージ名を「scenes」に修正してください。
作成したシーンを、親シーンに繋げます。「IndexScene」シーンに「GalleryScene」シーンを繋げる方法と同じです。親シーンとなる「GalleryScene」クラスを開いてください。それぞれの子シーンのインスタンスを生成して「name」を設定し、「addScene()」メソッドで繋げます。
これで、子シーン「AmericanScene」「FrenchScene」「MameScene」を親シーンに繋げました。
5.ボタンの作成
次に、シーン間を遷移するためのボタンを作成していきます。これも同様の方法です。[template]→[MyCastButton.as]を、[src]→[ui]へ3つコピーします。それぞれのファイル名、クラス名、コンストラクタ名を「AmericanButton」「FrenchButton」「MameButton」に修正し、パッケージ名を「ui」に修正して下さい。
作成した「AmericanButton」「FrenchButton」「MameButton」クラスを開いてください。コンストラクタ内にある、遷移先を設定する「sceneId」プロパティを以下のように設定します。
「sceneId」プロパティの設定が完了したら、ボタンを表示させましょう。「GalleryScene」クラスを開いてください。「AmericanButton」「FrenchButton」「MameButton」クラスのインスタンスを作成し、座標を設定後、イベント「atSceneLoad」内で表示の設定を行います。また、イベント「atSceneUnload」内で、表示オブジェクトの削除設定も行います。それぞれのクラスのインポートも忘れず行いましょう。
これでボタンの表示も完了したので、ここで一度ムービーを書き出し、ボタンをクリックして確認してみましょう。
「AmericanButton」「FrenchButton」「MameButton」それぞれのボタンをクリックすると、「GalleryScene」シーンから「AmericanScene」「FrenchScene」「MameScene」シーンに遷移しているのが確認できます。
6.表示オブジェクトの設定
次に、シーンの表示オブジェクトの設定を行います。前項目までで作成したシーンは、サイト上での「動物の詳細ページ」にあたります。まず、「AmericanScene」クラスを開いてください。
シーンに表示させるオブジェクトの設定を行っていきます。以下のソースで宣言しているクラスは、flaファイルにシンボルとして登録してあります。これらは「動物の詳細ページ」の枠となる部分です。それぞれインスタンスを生成し、表示する座標を設定します。イベント「atSceneLoad」内で表示の設定を行います。
ムービーを書き出して確認してみましょう。
赤線で囲んでいる部分がそれぞれのシンボルに対応している部分です。シンボルと画像の詳細についてはFlaファイルを参照してください。
「GalleryScene」シーンから「AmericanScene」シーンに遷移すると、「AmericanScene」シーンに表示されているオブジェクトが確認できます。
まだ、左右に移動するボタンと閉じるボタンが機能していません。ボタンの機能設定は後で行います。
この手順で、「FrenchScene」シーンと「MameScene」シーンも設定を行うのですが、この設定方法だと「AmericanScene」「FrenchScene」「MameScene」シーンそれぞれに遷移する度、枠となる表示オブジェクトを表示したり、削除する設定が必要です。しかし今回は、サイトの拡張性は考えないものとして、必ずこのシーン構成になると考え、まとめることができる部分は、一度に設定をまとめ、効率を良くしましょう。「動物の詳細ページ」の表示オブジェクトを親シーンのプロパティとして設定します。
「GalleryScene」クラスを開いてください。
これで、親シーンである「GalleryScene」シーンへ表示オブジェクトをプロパティとして保持させました。先ほど「AmericanScene」で設定した表示項目に関しては消去しておいてください。「GalleryScene」シーン内では、基本設定だけを行い表示リストへの追加設定は行いません。「GalleryScene」シーンには子シーンが3つあります。子シーンには、「GalleryScene」シーンから遷移してきた場合、「動物の詳細ページ」の枠となる表示オブジェクトを必ず表示させるよう設定します。遷移してきた時なので、表示を設定するイベントは「atSceneLoad」になります。
もう一度「AmericanScene」クラスを開いてください。ソースを修正します。先ほどは自クラスの中で宣言した変数でしたが、親シーンのプロパティにアクセスしますので、「parent」プロパティを使用します。「parent」プロパティは、呼び出し元の「AmricanScene」シーンの親にあたる「GalleryScene」シーンになります。「parent」プロパティを「GalleryScene」クラスでキャストし、「GalleryScene」シーンの持つプロパティにアクセスします。
ムービーを書き出して「AmericanScene」シーンで確認しましょう。さきほどと表示結果が同じになります。
シーンを移動する際は、自クラスのプロパティだけ削除します。続けて「AmericanScene」シーンのイベント「atSceneUnload」内に以下のソースを挿入してください。
「FrenchScene」「MameScene」クラスも同様に記述します。
ムービーを書き出して確認しましょう。それぞれのシーンに遷移すると、オブジェクトが表示されているのが確認できます。
「AmericanScene」「FrenchScene」「MameScene」シーン間を遷移する際は、それぞれが持つ表示オブジェクトを削除するだけで結構ですが、「GalleryScene」シーンに戻ってきた際は「動物の詳細ページ」の表示オブジェクトを削除する必要があります。子シーンから遷移してきた場合だけですので、表示オブジェクトの削除を設定するイベントは「atSceneInit」になります。
「GalleryScene」クラスを開き、イベント「atSceneInit」内に表示オブジェクトの削除を設定します。
これで「動物の詳細ページ」の表示オブジェクトの表示に関する設定が完了しました。
7.ボタンの機能設定
次に、「動物の詳細ページ」の表示オブジェクトである、「CloseButton」「BackButton」「NextButton」ボタンの機能を設定していきます。
プロジェクトの[template]→[MyCastButton.as]を[src]→[ui]に3つコピーします。3つのファイル名、クラス名、コンストラクタ名を「CloseButton」「BackButton」「NextButton」に修正します。パッケージ名を「ui」に修正します。
まずは「CloseButton」クラスから設定します。「CloseButton」クラスは「動物の詳細ページ」を閉じて、「動物の写真一覧ページ」に遷移するボタンです。「CloseButton」クラスを開いてください。「sceneId」プロパティを設定します。「動物の写真一覧ページ」である「GalleryScene」シーンに遷移するよう設定します。
ここで、「CloseButton」のシンボルと関連づけをしましょう。「index.fla」内の[ui]→「CloseButton」から右クリックメニューのプロパティを開きます。「クラス」の項目が「CloseButton」になっていますが、これを「ui.CloseButton」に修正します。
関連づけが完了したら、チェックボタンをクリックして確認しましょう。そして、ムービーを書き出して確認しましょう。「CloseButton」ボタンにカーソルを合わせるとボタンとして機能しています。クリックすると、「GalleryScene」シーンに遷移するはずです。
次に「BackButton」クラスと「NextButton」クラスの設定を行います。この2つのボタンは「AmericanScene」「FrenchScene」「MameScene」シーン間を遷移する機能を有します。これまで、ボタンを押した時の遷移先はボタンの「sceneId」プロパティで設定を行ってきました。しかし、「BackButton」ボタンと「NextButton」ボタンは表示されたシーンによって、遷移先が変わります[3]。「BackButton」と「NextButton」のクラス内の「sceneId」はコメントアウトしましょう。
未設定の「sceneId」プロパティは、「AmericanScene」「FrenchScene」「MameScene」シーンでそれぞれ設定します。つまり、「BackButton」ボタンと「NextButton」ボタンの「sceneId」プロパティはシーンを遷移するたびに遷移先が変更されます。
「BackButton」と「NextButton」のインスタンスは、「GalleryScene」クラスのプロパティですので、「parent」プロパティを使用します。設定を有効にするため、「atSceneLoad」イベント内で設定します。
「AmericanScene」クラスを開いて設定してください。
同様に、「FrenchScene」クラスと「MameScene」クラスも設定します。
「BackButton」と「NextButton」も「CloseButton」と同様に、「index.fla」内のシンボルと関連付けを行います。それぞれのシンボルのプロパティを開き、クラスの部分に「ui」を足してください。
設定が完了したら、ムービーを書き出して確認しましょう。シーン毎に設定した遷移先に遷移しているのが確認できます。
8.ロールオーバーの設定
トップページのボタンにロールオーバー時の効果を加えましょう。使用するのはFlaファイルの中にある「Effect」というシンボルです。Progressionの描画クラスを使用して「Effect」を定義しましょう。プロジェクトの[template]から[MyCastSprite.as]を[src]にコピーし、ファイル名、クラス名、コンストラクタ名を「Effect」に修正します。
次に「Effect」を開き、設定を行います。ボタンにマウスポインタがフォーカスされた際に、左側から効果を出したいので、x座標の初期値をマイナス値に設定し、同時にalpha値も0にします。この設定を、イベント「atCastAdded」内に設定します。「atCastAdded」は、コマンドの「AddChild」などを経由して、表示リストに追加されたタイミングのイベントを示します。
この設定により、「Effect」は表示リストに追加された際、x座標は-70になり、alpha値は0になります。
では、設定した「Effect」を表示させましょう。トップページにあるボタンに対して使用するので、「HomeButton」「AboutButton」「GalleryButton」を開き、設定を行います。
「Effect」型で変数を定義し、コンストラクタ内でインスタンスを生成します。表示の設定を、ロールオーバー時にあたる、イベント「atCastRollOver」内に設定します。まず、コマンド「AddChild」を使用し、「Effect」を表示させます。ロールオーバーはこのクラスのインスタンスにだけ適応されればよいので、第1引数には「this」プロパティを入れます。「AddChild」を使用した際、先ほど「Effect」で設定した「atCastAdded」イベントが送出されます。ここまでで、表示リストには追加されましたが、x座標がマイナス値である上、alpha値が0なので視認はできません。コマンド「DoTweener」で動きを加え表示させましょう。
ロールアウト時の設定も行いましょう。コマンド「Dotweener」を使用し、画面から表示させなくし、コマンド「RemoveChild」を使用し削除します。イベント「atCastRollOut」内に以下のように記述します。
上記の設定を、「HomeButton」「AboutButton」「GalleryButton」クラスに行います。
ムービーを書き出して確認しましょう。
マウスのフォーカスをボタンにあてた際、「Effect」が表示され、マウスをボタンから離すと「Effect」も表示されなくなります。
9.プリローダーの作成
最後に、プリローダーを作成します。プロジェクト[Project_gihyo]の「Preloader.fla」と「Preloader.as」を開いてください。「Preloader.fla」のプロパティを開き、サイズを「640×480」pxに設定します。
「Preloader」クラスの設定を行っていきます。まず、表示させる項目を定義します。
続いて、イベント「atReady」内で表示項目の初期化を行います。
イベント「atCastLoadStart」内に、読み込み開始時の処理を設定します。
「foreground」プロパティは、最前面に表示される表示オブジェクトを指します。次に、イベント「atProgress」内に、読み込み中の処理を設定します。
最後に、イベント「atCastLoadComplete」内に、読み込み完了時の処理を設定します。
以上の設定が完了したら、「Preloader.fla」をコンパイルし、ムービーを書き出してみましょう。
プリローダー画面で、読み込み状況に応じてプログレスバーが伸びているのが確認できます。読み込みが完了すると、サイトのTOPページに遷移します。
10.ブラウザでの確認
完成したサイトをブラウザで確認してみましょう。まず、Progression プロジェクトパネルを開いてください。プロジェクトパネルにある「リリースビルドを書き出す」をクリックします。
プロジェクト[Project_gihyo]内に「bin-release」が作成されます。
「bin-release」内のファイルは、webに公開する際、必要になるファイルです。特に変更がなければ「bin-release」内の全ファイルをwebサーバにアップロードすれば、web上で作成したサイトを閲覧できます。そのフォルダ内の「index.html」を開くと、作成したサイトが表示されます。
まとめ
以上で、クラススタイルでのサイト構築は終了です。始めは戸惑うことがあるかもしれませんが、慣れてしまえば本当に制作が容易になります。今回は初歩的な部分だけでしたが、Progressionにはまだまだ魅力的な機能がたくさんあります。是非、ご自身で探求し、Progressionについて深めてみてください。
なお、サンプルサイト自体にアニメーションがあまりありませんので、コマンドの「DoTweener」クラスなどを使用して、動きを加えてみても面白いでしょう。以下からダウンロードできるソースコードは、多少動きを加えたものになっています。また、今回は表示オブジェクトの大半をシンボルでのみ扱っていましたが、クラスで定義し、「キャスト」として扱うことも可能です。ソースコードにはそちらの手法を載せていますので、参考にしてください。
次回は、FlexSDKによるProgressionの環境設定です。Adobe FlashがなくてもProgressionを使用できる環境を設定し、今回と同じサンプルサイトを制作していきます。