30 April 2010
ページ ツール |
この記事の対象読者は、現在Flash Professionalを使用しているデベロッパーで、高度に構造化されたActionScriptコードをSWFベースのコンテンツに使用することに関心をお持ちの方です。この記事ではアニメーションの概念についても多少説明しますが、読者はFlash Professionalのツールの使用経験があることを前提としています。
中級
Adobe Flash Builder 4は、ActionScript 3およびFlexフレームワークを対象としたEclipseベースのIDEです。この環境の登場によって、Flashデベロッパーは、インタラクティブコンテンツの作成にAdobe Flash Professionalを使用する際に、生産性の高いコード開発環境を利用できるようになりました。
Flash ProfessionalコンテンツでクラスベースのActionScriptコード(タイムラインベースのActionScriptコードではなく)を使用するのは、多くのデザイナーにとってなじみのないことかもしれませんが、少しでも複雑なプロジェクトを扱う場合には、再使用可能なコードの利点は大きなものになります。この手法では、デベロッパーとデザイナーが協力して作業するための新しいワークフローが可能になり、プロジェクトのデザインとロジックをより明確に分離できるようになります。
この記事では、新しいFlash Builder 4とFlash Professional CS5の統合機能の概要を紹介し、ActionScriptクラスで制御される単純なキャラクターアニメーションの作成を通じて、改良されたワークフローについて説明します(図1のボタンをクリックすると、完成したアニメーションが見られます)。さらに、完成した作業結果をFlexプロジェクトに取り込む方法と、リッチインターネットアプリケーション(RIA)のコンテンツやビジュアルコンポーネントを再使用する方法も説明します。
図1. このチュートリアルで作成する単純なプロジェクト。表示されたボタンは、MovieClipを起動し、ActionScriptを使用したアニメーションを再生します(ボタンをクリックするとサンプルが表示されます)。
注意:サンプルプロジェクトのチュートリアルステップは、Flash Professionalでのアニメーションの基礎を理解している読者向けに、意図的に簡潔にしてあります。すなわち、この記事の主題は、ActionScriptとMovieClipシンボルの統合の技術的側面にあります。
この節では、サンプルプロジェクトで扱うツールとワークフローの概要を紹介します。Flash Professionalのツールに十分に慣れている方は、この節は飛ばし読みするか、チュートリアルに直接進んでもかまいません。Flash ProfessionalとFlash Builderを初めてお使いになる方は、このままお読みください。
Flash Professionalの主な目的は、デザイナー向けの機能を使用してアニメーションやビジュアルコンテンツを開発することです。当初、Adobe Flash Playerの最も魅力的な特長は、軽量なベクトルコンテンツをWeb上に表示できることでした。その後、Flash Playerの機能が拡大するにつれて、Flash Professionalのアニメーション機能の範囲も広がり、様々な種類のクリエイティブ作業をサポートするようになりました。
Flash Professionalの最新バージョンには、ビジュアルデザイナーのための強力な機能アップデートがいくつか含まれています。Flash Professional CS4(およびFlash Player 10)では、3D回転およびアニメーションツール、アニメーションアーマチュアを作成するためのBoneツール、アニメーションのモーションのXML定義に基づく高度なモーショントウィーン(ビジュアルに生成されたアニメーションを異なるタイムラインやプロジェクトで再使用したり別の目的に使用したりすることが可能)などが導入されています。Flash Professional CS5では、テキストレイアウトフレームワークの導入によるテキストサポートの改善、CFF(Compact Font Format )を使用した新しい種類のフォント埋め込みの導入により、ビジュアルデベロッパーが使用可能なツールがさらに増えました。また、Flash Professional CS5では、コード開発環境であるFlex SDKおよびFlash Builderとの間のワークフローおよび統合も改善されています。
最初に理解すべきことは、扱うファイルのタイプです。
このチュートリアルの作業では、Flash Professional CS5ワークスペースの次に示す機能を使用します。
以下の部分ではFlash Professionalの他の様々な機能を扱いますが、主要な要素はここまでの説明で紹介されています。Flash Professional CS5のユーザーインターフェイスの詳細については、FlashオンラインドキュメントのFlashワークフローとワークスペースを参照してください。
Flash Builder(以前の名称はFlex Builder)は、オープンソースFlexフレームワークによるクロスプラットフォームRIAの開発をサポートします。Flexは基本的に、アプリケーション開発の生産性を向上させるためのビジュアルコンポーネントとActionScriptクラスの集合です。Flexには、宣言的なXMLベースのマークアップ言語がActionScriptに加えて装備されており、他の言語の経験を持つプログラマーにとって魅力的です。
FlexはFlash Playerで動作するRIAの主要な開発手段として広く採用されてきましたが、一部のデベロッパーは、ActionScriptだけを使用する(すなわち、Flexフレームワークを使用しない)開発向けにFlex Builder(現在はFlash Builder)を使用することを選んでいました。
Flash BuilderではFlash Professional CS5との統合機能が導入されたので、FlashデベロッパーはFlash Builderの利点とFlash Professionalの強みを組み合わせることができるようになりました。Flash ProfessionalでもActionScriptファイルの作成と編集は可能ですが、Flash Builderのワークフローは大幅に改良されています。製品名の変更は、Flash Player向けコンテンツの開発が、FlashおよびFlexの枠を超えて、現在Flash Platformと呼ばれるようになったいくつかのツールを横断する統合ワークフローを含むようになったことを反映しています。
Flash Builderの強みの1つは、コードの作成と管理に関する機能です。ActionScriptファイルの作成のための充実したサポートとショートカット、コーディングプロセスを効率化するコードヒント、コンパイル時のコードチェック、デバッグツールなどが用意されています。
このワークフローで扱うファイルタイプのいくつかを以下に示します。
Flash Builderでチュートリアルの作業を行う際には、次のワークスペース機能を使用します。
Flash Builderユーザーインターフェイスの基本について詳しく知るには、Flash BuilderオンラインドキュメントのFlash Builderワークベンチの基礎(「特に「Flash開発パースペクティブ」の節)を参照してください。
新しいワークフロー統合では、Flash Professionalを通常の方法で使用し、Flash Builderは主に2つの用途に使用します。1つはActionScript開発を効率的に進めるためのコードエディターとして、もう1つはリアルタイムのコードデバッグツールとしてです。Flashデベロッパーの観点から見たこのワークフローの利点は、ほとんどの作業を既になじんでいる方法で行いながら、コード開発が必要なときにFlash Builderを使用できることです。Flash Builderの側から見てもこのワークフローはなじみ深いものであり、Control+Enter(Windows)またはCommand+Return(Mac)を押してFlash Professionalのムービープレビューモードを呼び出すこともできます。
Flash ProfessionalでアクションやActionScriptコードを作成するのに慣れている方は、コード開発にわざわざ別のツールを使用する必要があるのだろうかと思われるかもしれません(筆者自身、何年か前にテキストエディターをFlash Professionalと組み合わせて使用し始めたときに、同じことを考えました)。その答えは、より整理されて読みやすく理解しやすく、プロジェクト間での再使用が容易なコードを、より短時間で作成できるということです。さらに、Flash Builderに移行することで、コーディングショートカットやデバッグの強力なサポートが得られるとともに、コードをFLAファイルから分離できます。
次の節では、FLAファイルとActionScriptファイルを、付属のプロジェクトフォルダーに保存します。FLAファイルのライブラリ構造にはビットマップ画像とシンボルが含まれ、それらをActionScriptから制御することでアニメーションを作成します。
チュートリアルのFlex部分では、次に示すFlash Builder 4ファイルのデフォルトのワークスペースフォルダーに作業結果を保存します。 [ユーザー]/Flash Builder 4/FlexCharacterAnimation/src
アプリケーションプログラミングインターフェイス(API)とは、単にオブジェクトに割り当てられた変数と関数の名前を指します。これらは、オブジェクトを記述するか、オブジェクトに何かをさせる役割を果たします。例えば、ムービークリップシンボルでアニメーションを作成する場合、ムービークリップのActionScript APIを使用して、タイムラインの開始と停止を行います(play()とstop()はMovieClip APIの関数の例です)。また、アニメーションがどのフレームにあるかを知るには、ムービークリップのcurrentFrameプロパティを使用します(currentFrameはMovieClip APIのプロパティの例です)。Flash Professionalで、タイムラインを制御するためにplay()およびstop()アクションを使用したことがある方もおられるでしょう。このチュートリアルでは、単純なキャラクターアニメーションのためのカスタムAPIを作成する方法を示します。これには、特定のグラフィックステートを引き起こすコントロールが含まれます。その過程で、ActionScriptコードの作成のための推奨事項についても説明します。
次に示すのは、シンボルのグラフィックアセットをセットアップし、ActionScriptで制御するための手順です。シンボルでアニメーションを作成する方法をご存じなら、この手順のステップの多くは既におなじみでしょう。このワークフローでの違いは、タイムライン内のフレームを、停止アクションとフレームラベルでセクション化することです。通常のアニメーションのようにタイムライン内を初めから終わりまで再生するのではなく、ActionScriptを使用してタイムラインを制御し、コマンドで特定のフレームに移動します。
開発作業のActionScript側では、アニメーションのフレームラベルとセクションをコード環境から使用可能にします。このためには、フレームラベルに対応するプロパティと、グラフィックステートを表示するシンボルを呼び出すショートカット関数を含む、単純なスクリプトフォーマットを作成します。さらに一歩を進めて、アニメーションキューで定義されたステートのシーケンスに基づいて、再生するアニメーションを呼び出す、もう1つのスクリプトを作成します。結果として、シンボル用のコードコントロールの定義と実装の両方ができます。
この手法の利点は、実行時にActionScriptでアニメーションを動的に制御できることです。これにより、動きをランダムにしたり、アニメーションステートのデータ駆動シーケンスを再生したり、ユーザーの操作に対して視覚的に面白い方法で応答したりといった、様々な可能性が開けます。
今後の作業をスムーズに進められるように、最初にプロジェクト専用のフォルダーを作成し、その中でプロジェクトを開発することにしましょう。筆者は通常、クライアントまたは組織用のフォルダーを作成し、その中にプロジェクトフォルダーを作成します。
以下の手順で、プロジェクトをセットアップします。
project フォルダーは、このチュートリアルの手順において、作業用のルートフォルダーになります。FLAファイルとActionScriptファイルはこのフォルダーに保存します。
project_completed フォルダーには、チュートリアルの完成した動作するサンプルが入っています。その中の flash フォルダーには、チュートリアルの第1部の作業結果が入っており、 flex フォルダーには、同じファイルをFlexプロジェクトのサンプル用に変更したものが入っています。問題が起きたときは、これらのファイルを参照して解読してみてください。
次のステップでは、プロジェクトのビジュアルな焦点として用いられるグラフィックステートを作成します。グラフィックステートは、ボタンまたはActionScriptで制御できるアバターキャラクターの表現を表します。このチュートリアルでは、キャラクターを作成するための基本的なステップ、すなわち表現ステート、ロゴまたはラベル、実行時にアニメーションを制御するActionScript APIについて説明します。簡単にするために、シンボルは付属のグラフィックスを使用したフレーム単位のアニメーションとして作成されます。
キャラクターアニメーションには、キャラクターの目がいくつかの状態を取るように見せるグラフィックスが含まれています(図2を参照)。状態とは、デフォルト、またたき、左向き、右向き、上向きです。
以下の手順で、FLAファイルをセットアップします。
この時点で、メインタイムラインを離れて、Characterシンボルのタイムラインを表示しています。
作成したいアニメーションのステートがわかっているので、この機会にCharacterシンボルのタイムラインの構造をセットアップしておきます。1つのムービークリップタイムラインの内部でステートを分割するには、キーフレームとフレームラベルを使用して、タイムラインを視覚的にセクション化します。
このサンプルでは、トウィーンアニメーションの場合と違って、タイムラインはフレームを最初から最後まで再生するわけではありません。その代わりに、グラフィックステートに間隔を開けて、ActionScriptを使用して適切なフレームに移動します。
これで、Characterシンボルにアートワークを追加する準備ができました。このワークフローでは、別のグラフィックプログラムで既にグラフィックスを作成してあり、使用する画像が既に存在することを前提としています。もちろん、アートワークをFlashで作成することもできます。
以下の手順で、アートワークを読み込み、シンボルのレイアウトを完成します。
以下の手順で、ロゴまたはラベルのアートワークを読み込みます。
ここまでで、キャラクターアニメーションステートの基本要素がセットアップされました(図3を参照)。ActionScriptを使用して、これらの静的フレームをコードで決定されるタイミングで順次表示することにより、フレーム単位のアニメーションを表示できます。もちろん、トウィーンアニメーションやその他のフレーム単位のアニメーションを組み合わせて、ネストしたアニメーションも作成できます(すなわち、blinkステートに移動したときに、キーフレームがそれ自身アニメーションを含むネストしたムービークリップを保持していてもかまいません)。
シンボルのタイムラインのセットアップが終了したら、FLAファイルのビジュアルアセットをプログラムで制御するためのActionScript APIを作成できます。最初のステップでは、シンボルのステートを、知りたい可能性がある他のActionScriptオブジェクトに宣言するActionScriptクラスを作成します。
ActionScriptクラスは、決められた形式で書かれたActionScriptコードを含むテキストファイルです。この形式で用いられるクラスのキーワードと構文は、常に同じ方法で用いられます。ActionScriptクラスを作成したら、メインタイムラインまたはライブラリ内のシンボルのタイムラインに割り当てることができます。
以下の手順で、シンボルのActionScriptクラスを作成します。
Flash Builderで編集するオプションを選択すると自動的にFlash Builderの新規プロジェクト作成ダイアログボックスが表示されます(図5を参照)。このステップでは、Flash BuilderプロジェクトをFLAファイルとプロジェクトフォルダーに関連付けます。
01 package
02 {
03 import flash.display.MovieClip;
04
05 public class Character extends MovieClip
06 {
07 public function Character()
08 {
09 super();
10 }
11 }
12 }
次のステップでは、フレームラベルを定義するプロパティを追加します。このためには、定数静的プロパティと呼ばれるものを追加します。定数とは値が変化しないこと、静的とは、クラス定義に関連付けられ、クラス名から直接参照できることを表します。このステップの目的は、フレームラベルをプログラムから使用可能にして、コードヒントで参照したり、テキストエディターでコーディング中に自動的に正しい名前を入力したりできるようにすることです。
//*******************
// Constants:
static public const DEFAULT:String = "default";
static public const BLINK:String = "blink";
static public const LOOK_LEFT:String = "look_left";
static public const LOOK_RIGHT:String = "look_right";
static public const LOOK_UP:String = "look_up";
static public const PAUSE:String = "pause";
これでフレームラベルがコード環境から使用可能になったので、コードヒントでラベル名を確認したり、gotoAndStopを使用して任意のフレームに移動したりできます。ただし、移動を扱う新しい関数をAPIに作成しておいたほうが便利です。
//*******************
// Methods:
public function showState( label:String, play:Boolean=false ):void
{
// Pause the current state...
if( label == Character.PAUSE ){
return;
}
if( play ){
gotoAndPlay(label);
}else{
gotoAndStop(label);
}
}
showState()関数は、呼び出し時に2つのパラメーターを受け取ります。1つめは移動先のフレームラベル、2つめはフレームに対してgotoAndPlay()とgotoAndStop()のどちらを呼び出すかを指定します。最初の条件文によって、ラベルが「pause」であるかどうかが判定され、該当する場合は関数から戻って現在のステートに留まります。この機能は、複雑なマルチフレームアニメーションステートを扱う場合に便利です。
showState()関数の後に追加します。//---------------
// shortcuts
public function blink():void
{
showState(Character.BLINK);
}
public function lookLeft():void
{
showState(Character.LOOK_LEFT);
}
public function lookRight():void
{
showState(Character.LOOK_RIGHT);
}
public function lookUp():void
{
showState(Character.LOOK_UP);
}
ショートカット関数を呼び出すと、適切な定数静的プロパティをラベルとしてshowState()関数が呼び出されます。showState()関数の定義では、playパラメーターをデフォルトでfalseに設定しています。アニメーションで必要な場合は、2番目のパラメーターを使用して、フレームラベルに移動して再生することができます。ただし、このサンプルではこれは使用しません。グラフィックステートを分離する停止アクションが存在しないからです。
Flash BuilderをFlash Professionalの「Symbol Properties(シンボルプロパティ)」ダイアログから起動したので、作成したActionScriptクラスは既にFLAファイルのライブラリでCharacterシンボルに接続されています。
先に進む前に、プロジェクトフォルダーの中を見て、Flash BuilderがCharacter.asファイルとCharacterAnimation.asファイルをFLAと同じ場所に保存していることを確認します。次の節では、CharacterAnimation.asファイルを使用して、Characterシンボルによるアニメーションを作成します。
前の節では、Symbol Properties(シンボルプロパティ)ダイアログボックスでCharacter.asクラスをCharacterシンボルに割り当てました。その結果として、そのコードがシンボルのタイムラインのフレーム1に(ActionScriptのクラス構文なしで)書かれている場合と同じ動作が発生します。外部ActionScriptクラスを使用することの利点は、Symbol Properties(シンボルプロパティ)ダイアログボックスのBaseクラス設定を使用して、任意の数のアニメーションシンボルにクラスを割り当てられることです。これは、動作は同じだがグラフィックスが異なるいくつかののキャラクターを作成する場合に非常に便利です。
同様に、ActionScriptクラスをメインタイムラインに割り当てることもできます。このためには、ドキュメントのプロパティでクラス名をドキュメントクラスとして入力します。以下の手順では、Characterシンボルをインスタンス化するドキュメントクラスを作成し、ActionScriptとシンボルのコードAPIを使用して、ループするアニメーションを作成します。
以下の手順でドキュメントクラスを作成します。
Flash Builderでは、CharacterAnimationクラスが前述と同じスケルトン構造を持っていることが示されます。違いは、このクラスがMovieClipでなくSpriteを拡張していることです(Spriteはフレームが1つだけのMovieClipです)。
CharacterAnimation.asでは、Timerオブジェクトを使用してアニメーションを動かします。
import flash.events.TimerEvent;
import flash.utils.Timer;
タイマーを使用して、イベントハンドラー関数を一定間隔で呼び出します。Characterシンボルのステートのアニメーションキューを作成し、タイマーが関数を呼び出すたびにキュー内のステートを順番に再生します。そこで、次のステップでは、アニメーションシーケンスの生成中に使用する変数をスクリプトに追加します。
//*******************
// Properties:
public var target:Character;
public var states:Array;
public var state:uint = 0;
public var timer:Timer;
public var timerDelay:Number = 1000; // in milliseconds
targetプロパティは、Characterシンボルのインスタンスを保持します。statesプロパティは、アニメーションキューとしてシーケンス再生するフレームステートのリストを保持します。stateプロパティは、現在再生中のステートへの参照を保持します。timerおよびtimerDelayプロパティは、タイマーとキュー内のステートの再生間隔を定義します。
次に、コンストラクター関数のコードを追加します。この関数は、メインタイムラインがロードされてアニメーションが開始されるとすぐに実行されます。
// Create character instance
target = new Character();
target.x = (stage.stageWidth - target.width) / 2;
target.y = (stage.stageHeight - target.height) / 2;
addChild(target);
Characterシンボルの「Export For ActionScript(ActionScriptに書き出し)」オプションをオンにしてあるので、シンボルはムービー内のActionScriptから使用できます。target = new Character();という行は、newキーワードを使用してActionScriptでシンボルをインスタンス化します。これは、ライブラリパネルからステージにインスタンスをドラッグするのと同じです。Characterシンボルはムービークリップなので、追加したカスタムAPIに加えて、xおよびyプロパティやその他のムービークリップのプロパティを使用できます。
// Create the animation queue
states = new Array();
states = new Array();
states[0] = Character.BLINK;
states[1] = Character.DEFAULT;
states[2] = Character.LOOK_LEFT;
states[3] = Character.LOOK_RIGHT;
states[4] = Character.DEFAULT;
states[5] = Character.BLINK;
states[6] = Character.LOOK_UP;
states[7] = Character.DEFAULT;
states[8] = Character.BLINK;
states[9] = Character.DEFAULT;
配列のインデックスの番号付けパターンに注意してください。同じパターンを使用して、ステートを追加したり削除したりできます。この単純な例では、ループ前にフレームラベルを1回しか使用しませんが、シーケンス内のステートの任意の組み合わせと、任意の長さのアニメーションキューを作成できます。配列のインデックスが0から始まって増加するとともに、キュー内のステートが再生したい順序で並ぶようにします。
// Create a timer to drive the animation
timer = new Timer(timerDelay);
timer.addEventListener(TimerEvent.TIMER, onTimerTick);
timer.start();
最後に、アニメーションキューに基づいてキャラクターのステートを進める必要があります。これは、コンストラクターで設定したタイマーのイベントハンドラーで行われます。
//*******************
// Events:
private function onTimerTick(event:TimerEvent):void
{
// Show state from queue
target.showState(states[state]);
// Show next state next time around
state++;
// Loop if we've reached the end of the queue
if( state == states.length ){
state = 0;
}
}
FlashシンボルとActionScriptクラスを使用して、シンプルでかつスケーラブルなアニメーション構造を作成できました。
次に、作業の結果をテストしてみましょう。新しいFlash Builder統合の大きな特長の1つは、Flash ProfessionalをFlash Builderから起動して、「Test Movie(ムービーをプレビュー)」コマンドを実行したり、デバッガーを起動したり、Flashプロジェクトを展開のためにパブリッシュしたりできることです。
作業結果をプレビューする準備ができたら、Flash BuilderでControl+Enter(Windows)またはCommand+Return(Mac)を押して、Flash Professionalに戻り、「Test Movie(ムービーをプレビュー)」コマンドを起動します。
Flashで「Test Movie(ムービーをプレビュー)」コマンドが通常通りに動作し、SWFプレビューをパブリッシュします。作成した単純なループアニメーションを確認したら、SWFを閉じると、Flash Builderワークスペースに戻ります。
問題が発生した場合、Flash BuilderワークスペースからActionScript 3デバッガーを起動して、原因を調べることができます。この時点でファイルが正常に動作している場合には、デバッグ作業を経験するために、バグを1つ導入してみましょう。このためには、オブジェクトを宣言して値をインスタンス化せずに、オブジェクトインスタンスのプロパティまたはメソッドを呼び出します。
以下の手順で、Flash Builderからデバッグのワークフローを実行します。
var nullObject:Array;
var length:uint = nullObject.length;
これらの行は、Flash Builderの作成時のエラーチェックにはかかりませんが、Flash Playerではランタイムエラーを引き起こします。
TypeError: Error #1009: Cannot access a property or method of a
null object reference.
at CharacterAnimation()
ブレークポイントがあると、SWFの実行がそこで中断し、すべての変数をデバッガーで調べることができます。これは特に、null値から生じるエラーや、その他の方法では明確にわからないエラーに対して有効です。
Flashが起動し、ムービーが再生され、ただちに設定したブレークポイントで停止します。デバッガーでCharacterAnimation.asファイルが開き、ブレークポイントがある行と、スクリプトがエラーを通知した場所(該当する場合)が示されます。この情報に基づいて、Flash ProfessionalまたはFlash Builderでコードを編集して、問題を修正できます。ここで重要なのは、コードの行にブレークポイントを設定し、デバッグモードでSWF実行をその行で停止する機能です。デバッガーが実行を中断したら、SWFの実行中の変数の状態を参照して、null値やその他の問題を発見することができます。
すべてが正常で、ファイルをWebに送る準備ができたら、Flash BuilderまたはFlash Professionalから、SWFとHTMLページをパブリッシュできます。
ビューがFlash Professionalに切り替わり、HTMLファイルとSWFがプロジェクトフォルダーにパブリッシュされます。プロジェクトフォルダーを調べて、プロジェクトから生成されたファイルを確認します。
注意:Flash BuilderでPublish In Flash Professional(Flash Professional でパブリッシュ)ボタンをクリックしても何も起こらない場合は、ファイルにエラーがないことと、Flash Builderでプロジェクトが正しく選択されていることを確認してください。
作業はこれだけです。Flash Builder統合ワークフローのチュートリアルの第1部がこれで終了しました。
RIA開発におけるFlexフレームワークの普及とともに、Flash Professionalの作業結果をFlash Builderプロジェクトで使用できるように準備することが必要な場合も増えてきました。これは特に、FlexよりもFlash Professionalで作成した方が簡単なアニメーションやコンテンツに関して言えることです。
この節では、アニメーションをFlexで使用できるコンポーネントに変換する方法と、Flexでコンポーネントを実装するための最初の段階について説明します。
最初に必要なのは、FlashコンテンツをFlexフレームワークで使用できるように準備することです。これは、Flash Professional CS5の「Convert Symbol To Flex Component(シンボルをFlexコンポーネントに変換)」コマンドで簡単に実行できます。
以下の手順では、CharacterシンボルをFlexフレームワークで使用できるコンポーネントに変換します。
以下の手順で、コンテンツを準備します。
これで、CharacterシンボルをFlexコンポーネントに変換する準備ができました。FlexComponentBase SWCをFLAファイルに追加し、「Publish Settings(パブリッシュ設定)」の「Flash」タブの下の「Export SWC(SWC書き出し)」オプションをオンにします。FlexComponentBase SWCは、Flexフレームワーク固有のActionScriptをファイルに追加し、ムービークリップをFlexで使用できるようにします。
注意:シンボルにカスタムクラスが割り当てられていない場合、これで完了です。ここではカスタムクラスがあるので、コンポーネントクラスが標準のflash.display.MovieClipでなくmx.flash.UIMovieClipを拡張するようにFlash Builderで更新する必要があります。コマンドもこれを行おうとしたのですが、Flash Builderで既に基本クラスが定義されている場合は、基本クラスを割り当てることができません。対策として、スクリプトに簡単な変更を加えます。
importステートメントを次のように変更します。import mx.flash.UIMovieClip;
extendsキーワードの後のクラス名を、MovieClipからUIMovieClipに変更します。public class Character extends UIMovieClip
{
...
このクラスへの変更と、FLAファイルのライブラリへのFlex SWCの追加が、Flexフレームワーク用にファイルを準備するために必要なすべてです。Flashに戻って、セットアッププロセスを完了します。
シンボルのアイコンがFlexアイコンに変わります(図8を参照)。
最後に必要なのは、SWCファイルをFlexで処理するために書き出すことです。SWCファイルは基本的に、.swcという拡張子を持つZIPファイルです。これには、SWFファイルと、SWFのコンテンツを記述するメタデータが含まれます。SWCは、SWFコンテンツをコンポーネント形式で配布するための標準のファイル形式です。FLAファイルは、Convert Symbol To Flex component(シンボルをFlexコンポーネントに変換)コマンドを実行したときに、既にこのために設定されています。
CharacterAnimation.swcというファイルがプロジェクトフォルダーに作成されます(このSWCファイルは、サンプルの project_completed/flex/libs フォルダーにもあります)。
注意:Flashシンボルのグラフィックスは、タイムラインの左上の座標0、0に合わせておくことが重要です。そうでないと、Flexフレームワークで信頼性のある位置制御ができません。
Flexプロジェクトの定義と作成は、すべてFlash Builder内で行います。Flash Professionalで作成したコンテンツを組み込むには、前述の手順で作成したSWCを、Flexプロジェクトのライブラリフォルダーに追加します。
以下の手順で、Flexプロジェクトを作成し、SWCファイルを追加します。
プロジェクトがパッケージエクスプローラーに表示され、FlexCharacterAnimation.mxmlというファイルが自動的に生成されてエディターで開かれます。MXMLファイルはXMLのファイルであり、MXMLマークアップと、<fx:Script>タグに囲まれたActionScriptの両方を含むことができます。このファイルを使用して、FlashコンポーネントをFlexでテストするための簡単なユーザーインターフェイスをセットアップします。ファイルを編集用に開いておきます。
注意:Flexは、MXMLファイルとその他のソースファイルを、Flexプロジェクトフォルダーの下の src フォルダーに保存します。
Flash Professionalで作成したコンテンツをFlexフレームワークで確認するため、MXMLを使用してコンポーネントを宣言し、アニメーションのステートを起動するボタンをいくつか追加します。結果として、キャラクターの2つのバージョンが画面に表示されます。1つはCharacterAnimationインスタンス自身によるアニメーション、もう1つはCharacterインスタンスのステートがFlexボタンによって制御されるものです。
以下の手順では、単純なユーザーインターフェイスを作成します。MXMLをまだ使ったことがない場合は、この機会に、Flash Professionalプロジェクトの成果をFlex環境に組み込む方法をぜひ覚えていただきたいと思います。
以下の手順で、サンプルユーザーインターフェイスをFlexで作成します。
<s:Application>タグに注目してください。これはアプリケーションのラッパーです。Applicationタグには、いくつかのxmlns属性があります。これらは、ファイル中で参照されるコンテンツの名前空間(クラスパス)を定義します。最初に、ローカルコンテンツを識別する新しい名前空間を libs フォルダーに追加します。
Applicationタグをxmlns:local="*"属性で更新します。<s:Application xmlns:fx="http://ns.adobe.com/mxml/2009"
xmlns:s="library://ns.adobe.com/flex/spark"
xmlns:mx="library://ns.adobe.com/flex/mx"
xmlns:local="*"
minWidth="955"
minHeight="600">
これにより、SWCファイル中のシンボルを、MXMLを使用して libs フォルダーで参照できるようになります。
Application開始タグと終了タグの間に次のコードを追加します。<mx:VBox paddingLeft="50">
<mx:HBox paddingTop="50">
<local:Character id="character" x="100" y="100"/>
</mx:HBox>
<mx:HBox paddingTop="50">
<mx:Button label="Blink" id="btn1" click="{character.blink()}"/>
<mx:Button label="Look Left" id="btn2" x="100"
click="{character.lookLeft()}"/>
<mx:Button label="Look Right" id="btn3"
click="{character.lookRight()}"/>
<mx:Button label="Blink" id="btn4" click="{character.lookUp()}"/>
</mx:HBox>
</mx:VBox>
上述のコードで、Characterシンボルを<local:Characterで参照できることに注意してください。また、4つのボタンからMXMLマークアップを通じてCharacterシンボルのAPIを呼び出せることにも注意してください。ここに示すXML構文は、Flexフレームワークでの開発で一般的に用いられるものであり、ActionScriptコードと組み合わせることができます。
Flex 4でのMXMLおよびActionScriptの作成の詳細については、FlexオンラインドキュメントのAbout MXMLを参照してください。
Flexでは、Flashと違って、「Test Movie(ムービーをプレビュー)」コマンドを使用することはできません。プロジェクトをテストするには、SWFをブラウザーで起動します。
以下の手順で、Flexプロジェクトをコンパイルしてプレビューします。
注意:エラーのためにプロジェクトを実行できない場合は、問題ビューにエラーが表示されます。
プロジェクトをビルドすると、パブリッシュされたファイルは bin-debug フォルダーの下に置かれます。
注意:Flash Builderのデバッグワークスペースを使用するには、Flash Playerのデバッグバージョンがインストールされている必要があります。Flash ProfessionalおよびFlash Builderでのデバッガーの使用の詳細については、筆者の記事FlashでのActionScript 3デバッグの理解を参照してください。
Flash BuilderでのFlexアプリケーションのデバッグとプロファイリングの詳細については、Flash Builderオンラインドキュメントのアプリケーションのデバッグを参照してください。
このチュートリアルではFlash Builder/Flash Professional/Flexフレームワークのワークフローの概要を紹介しましたが、アニメーションのコンテンツはあえてシンプルなものにしました。さらに練習を進めるには、フレーム単位のアニメーション、トウィーンアニメーション、その他の現実的なアニメーションキューシーケンスを使用して、アニメーションシンボルを拡張してみるとよいでしょう。ここで示したコード構造を使用する場合は、Characterシンボルの各ビットマップグラフィックを選択して、ビットマップをそれぞれ独自のネストしたシンボルに変換するのが最善でしょう。そこから、この記事で紹介したアニメーションステートの概念をよりよく定義するネストしたアニメーションの作成を試してみてください。
付属のファイルの project_extras フォルダーの下には、各キャラクター表現にフレーム単位のアニメーションを使用する、さらに高度なチュートリアルが収録されています。追加のサンプルには、ネストしたアニメーション、戻りアニメーション、ActionScriptコードのバリエーションなどが示されています。
Flexフレームワークでの作業と、Flash ProfessionalおよびFlash Builderでのワークフローの統合を試してみることで、Flash Platform統合に関する知識を拡大することができます。ぜひチャレンジしてください。
サンプルファイル用のすてきなアートワークとアニメーションフレームを提供してくれたSam Hoodに感謝します。SamのFlashキャラクターアニメーションのその他のサンプルは、hoodness.comにあります。