ここから始めるActionScript 3.0 移行ステップガイド
R Blank
今月号の記事
Adobe Flex 2 とFlash CS3 Professional の両方から生成される SWF ファイルを実行する Adobe Flash Player 9 は、Flash プラットフォームのさらなるパワーアップを体現するもの といえます。Flash Player 9 を利用すれば、Flash 7 や 8 でオーサリングしたプロジェクトに比べて、最高30倍も高速に実行されるプロジェクトをオーサリングすることさえできます(そうです、30%高速ではなく「30倍」高速になるのです!)。
今回、Flash Player 9 のパフォーマンスが大幅に向上した理由としては、Flash や Flex のデベロッパーが記述したコードを解読する ActionScript Virtual Machine(AVM)をすべて開発し直されていることが挙げられます。また今回、新世代の Flash テクノロジーの良きパー トナーともいえる ActionScript の最新バージョン、ActionScript 3.0 にも大幅な改良が施されています。ActionScript 3.0 は、旧バージョンよりはるかにパワフルであるとともに、ActionScript 言語を ECMAScript 国際規格に完全に準拠させたバージョンでもあります。そのため ActionScript 3.0 は、従来の Flash デベロッパーが慣れ親しんでいるもの以上の厳密さが求められます。
熟練プログラマーではあるものの、Flash 開発は初めての方にとっては、ActionScript 3.0 の方が ActionScript 2.0 より分かりやすいと感じることでしょう。これは、ActionScript 2.0 のハードルを高める一因でもあった、Flash ユーザ以外にとっては分かりづらい従来のアーキテクチャが、ActionScript 3.0 で整理されているからです(タイムラインは従来のプログラマーにとって非常に謎めかしい存在でしかありませんでした)。しかし、既存の Flash ユーザ、特に ActionScript 1.0 や ActionScript 2.0 を独学でマスターしたユーザにとっては、つまるところ完全なプログラミング言語である ActionScript 3.0 は、取りつきにくい存在になるかもしれません。
ActionScript 3.0 に恐れを感じる一因として、ActionScript 3.0 が白黒はっきりとした選択を求めることが挙げられます。ActionScript 2.0 が登場した際、ユーザは ActionScript 1.0 と ActionScript 2.0 のどちらでも自由に使用することができました(しかも、どちらを使用しても完成した Flash ムービーの品質およびパフォーマンスには、一切影響を及ぼしませんでした)。しかし Flash CS3 では、必ず ActionScript 3.0 と ActionScript 1.0/2.0 のどちらを使用するかを選択しなければならず、ひとつの Flash プロジェクト内に異なる仕様のコードを混在させることができなくなります。しかも、仮に Flash 9 の SWF ファイルに Flash 8 の SWF ファイルを(またはその逆を)読み込めたとしても、特定の回避策を利用しない限り、これらの SWF 間でコミュニケーションをとることができません。
ActionScript 2.0 の登場後も ActionScript 1.0 が利用できたように、Flash CS3 でも、引き続き ActionScript 1.0 または ActionScript 2.0 で Flash プロジェクトを記述することは可能です。しかし、Flash CS3 ではどのバージョンの ActionScript を利用して開発するかが、最終的なユーザ体験に直接的かつ非常に大きな影響を及ぼします。そして一旦 ActionScript 3.0 をマスターしさえすれば、他を圧倒するようなアプリケーションが記述できるようになるのです。
実際のところ、昨年 Flash Professional 9 ActionScript 3.0 プレビューが公開され(プレビューは Adobe Labs にて何ヶ月間も公開されていました)、初めて ActionScript 3.0 触った時、筆者はアドビが従来のデベロッパーにどれほど多くの事柄の変更を強いるかに驚きました。しかし、新しい ActionScript を使い込むに連れ、いくつかの基本コンセプトと要領さえ理解すれば、より手軽に ActionScript 1.0/2.0 から ActionScript 3.0 へと移行できることに気付いたのです。すべての Flash ユーザが簡単に ActionScript 3.0 へと移行できる!とは言いませんが、いくつかのヒントを参考にすることで、新しい ActionScript の習得(そして、マスター)をスピードアップできることは間違いありません。
新しくなった ActionScript 言語の利点を挙げるとキリがありませんが、この言語を習得することで、開発作業やキャリアアップに向けて、より多くのメリットが受けられるようになることでしょう。一旦 ActionScript 3.0 に慣れさえすれば、ActionScript デベロッパーのほとんどが、コーディング主体の Flash 制作に対して、より整合性が高く、よりエレガントなプラットフォームを提供する、この新しい開発言語に大きな価値を見出すことになるはずです。
アルファ値は0から1の範囲で指定する
旧来の ActionScript では、ムービークリップのアルファプロパティを 0 から 100 の間の値で指定していましたが、ActionScript 3.0 では、0 から 1 がアルファ値の範囲になります。このような軽微な変更は、それ自体たいしたものではないものの、ActionScript 3.0 を始める上で十分に注意しておく必要がある事柄といえるでしょう。デベロッパーがデバッグ作業に何時間もの時間を無駄にしたり、フラストレーションをため、やる気を失うような事態に陥りかねない変更点です。
これに似た軽微な変更点は、他にもたくさんあります。たとえば、これまで MovieClip プロパティで使われていたアンダースコアがすべて削除されていたり(「_x」は「x」に、「_width」は「width」になります)、Video クラスの attachVideo() メソッドがより適切な名前のattachNetStream()へと変更されていたりします。ActionScript 3.0 の習得を開始する際には、ActionScript テクノロジセンターにアクセスすることを強くお勧めします。
ムービークリップの変更点を押さえる
次のコードが機能すれば素敵だと思いませんか。
var mc:MovieClip = new MovieClip();
そうです、ActionScript 3.0 ではこのコードが正しく機能するのです。これは既存の Flash デベロッパーにとって、最も大きな概念上の変更点といえるかもしれません。ActionScript 3.0 には新しい表示リストがあり、これが Flash Player 上における皆さんの SWF ファイルの実質的な物理アーキテクチャを構成します。
従来の Flash における最大の重荷といえば、ムービークリップが SWF ファイル上のすべての物理オブジェクトの親タイプとして扱われていたことでしょう。これは、すべての要素がムービークリップであったり、すべての要素にタイムラインが必要なわけではなかったにも関わらずです。ActionScript 3.0 には DisplayObject という名前の新しいクラスがあり、MovieClip は単に表示オブジェクトの 1 種類として存在します。なお、もう 1 種類の表示オブジェクトはスプライトです。これらの DisplayObject の各種類には、別々の能力が備わっています(しかも、それぞれ異なるリソースを利用します)。つまり、ムービークリップに対してできることと、スプライトに対してできることがそれぞれ異なるのです。
前述のコードがムービークリップを生成するからといって、このムービークリップが自動的に表示されるわけではありません。ムービークリップを表示するには、当該 DisplayObject クラスをステージまたは他の表示オブジェクトに添付する必要があります。ムービークリップ(またはすべての表示オブジェクト)をどこへ配置するかは、addChild() または addChildAt() メソッドを利用して Flash に明示的に指示する必要があります。
なお、これによってさまざまな可能性が生まれます。たとえばこれまでの Flash の場合、ムービークリップは特定のタイムラインに関連付けられていたため、ムービークリップを別のタイムライン上に移動することができませんでしたが、これからは removeChild() や addChild() を利用して表示リスト内の表示オブジェクトの位置を動的に変更することができます(たとえば、プロジェクトのある部分のタイムラインからムービークリップを削除し、これをプロジェクト内のまったく別の部分のムービークリップに移動するといったことが可能です)。複雑に絡み合うタイムラインに惑わされるようなことは、過去のものとなることでしょう。
_root はどこへ?
表示リストの考え方の変更に加えて、ActionScript 3.0 では、_root の概念もなくなっています。つまり、SWF ファイルのメインのタイムラインへの参照がなくなりました(それどこ ろか、メインのタイムラインを維持する必要さえなくなりました)。また、万能的にアクセス可能な Stage クラスもなくなっています。
では、ActionScript 3.0 でこれらの概念はどうなるのかというと、ステージまたはステージの子に関連付けられた表示オブジェクトは、各自、Stage と呼ばれる当該ステージへの参照を持つことになります。従来、_root として捉えてきたものは、今後、Stage プロパティで参照することができます。
新しくなったパッケージを知る
パッケージで肝心なのは許容量の大小ではなく、いくつのクラスを含められるかということです。パッケージとは一連のクラスのことであり、デベロッパーがコードを整理する目的で利用できるツールです。ActionScript 2.0 のパッケージは、クラスファイルを収容するためのコンピュータ上のフォルダであり、コードを整理するための便利なツール程度のものでした。なお、各ファイルには 1 つのクラスしか含められず、しかも、クラス名とファイル名を完全に一致させなければならないという制約がありました。
しかしこれからは、package ステートメントを利用して ActionScript(.as)ファイル内で定義可能な、真の意味でのパッケージが扱えるようになります。AS ファイルにパッケージ(またはネスト化された複数のパッケージ)を収録し、この中に 1 つまたは複数のクラスを含めておくことが可能です。
一見この変更はプログラマーをさらに混乱させるようなものに見えるかもしれませんが、実際にこの新しいコード構造を試してみると、その柔軟性が気に入るはずです。筆者自身も、この機能がコーディング体裁にどれほどの影響を及ぼすかについて懐疑的でしたが、作業を進めるに連れ、クラス(特に、純粋なデータクラスなど)が非常に簡単に作成できるようになったことを実感しています。パッケージに関する今回の変更は、ActionScript プログラマーにより良いオブジェクト指向プログラミング手法を教示するものといえるでしょう。
7 つの主要パッケージ/クラスを読み込む
ActionScript 3.0 のクラスファイルを使用し始めてまず気付くのは、これまで ActionScript に内含されていた一連の Flash Player クラスを、ActionScript 3.0 では明示的に読み込まれなければならなくなったことでしょう。つまり、仮にテキストフィールドを作成したい場合は、次の例にあるように、テキストフィールドクラスを明示的に読み込ませる必要があります。
import flash.text.TextField;
また、テキストパッケージのすべてのクラスを読み込みたい場合は、次のように記述します。
import flash.text.*;
なお、import ステートメントに対しては変更がないので、このステートメントは ActionScript 2.0 の時と同じように利用できます。これからは、単に import ステートメントがより頻繁に必要となるだけです。所定のクラスを明示的に読み込まなかった場合、クラスファイルでできることは大幅に制限されることになります。
ActionScript 3.0 のパッケージとクラスファイルを使い慣れず、どのクラスが必要になるかを心配したくない場合は、次の 7 つのパッケージを覚えておくと良いでしょう。これら 7 つのパッケージには、大半の Flash アプリケーションまたは FLA に必要なクラスのほとんどが含まれています(よりプロフェッショナルな開発手法としては、必要なクラスだけを読み込むようにしてください)。
import flash.net.*;
import flash.events.*; import flash.display.*; import flash.geom.*; import flash.ui.*;
import flash.utils.*;
import flash.text.*;
document クラスを活用する
document クラスはすべてのデベロッパーにメリットをもたらせることができるものですが、中でも、特にメインタイムラインに 1 フレームだけを配置していたようなデベロッパーにとって最も有用なものです。Flash アプリケーションをコーディングする際、デベロッパーの多くは FLA の単一フレームにすべての要素を配置し、わずか 1行の ActionScript を利用して、詳細を記述した外部クラスファイルを呼び出しています。これからは、この1行のコードさえ不要になり、パブリッシュ設定のダイアログボックス上またはステージが選択 されている際のプロパティパネル上で直接、FLA に document クラス(制作中の FLA に対する単一のクラスファイル)を割り当てることができます。
このクラスは、必ずスプライトまたはムービークリップのいずれかを継承するものである必要があります(ユーザ自らの document クラスであるため)。このクラスのコンストラクタ関数は当該 SWF ファイルの読み込みとともに自動的に呼び出されます。この強化点はコードのエレガントな進化例を表すものといえ、使い込むに連れ、そのメリットが明らかになっていくはずです。
ビットマップおよびムービーの読み込み方法
loadMovie() メソッド(あるいは旧来の ActionScript でいう MovieClipLoader() クラス)は、大半の Flash デベロッパーにとって欠かせない存在といえるでしょう。そこで、ここでは Flash 9 コンテンツに Flash ムービーまたはビットマップ(JPEG、PNG、GIF)を読み込ませるための重要な7行のコードを紹介することにします。以下に示すコードはスプライトを使った簡単な例ですが、他にもさまざまなバリエーションが考えられます。
var bgToLoad:String = "05092007.gif";
var bgLoader:Loader = new Loader();
var bgURL:URLRequest = new URLRequest(bgToLoad);
bgLoader.load(bgURL);
var bg:Sprite = new Sprite();
bg.addChild(bgLoader);
addChild(bg);
このコードでは、まず Loader オブジェクトを作成し、メディアファイルにポイントした URLRequest オブジェクトを使用して外部メディアの読み込みを指示しています。この際、メディアを読み込ませる先の表示オブジェクト(bg)が確かに存在することを確認するようにします。なお、このコードはメインのタイムラインに存在することになるので、最終行の addChild によって、bg スプライトをステージ上に配置しています。
XML の読み込み方法
Flash ユーザの多くが外部 SWF ファイル・ビットマップの読み込みに慣れ親しんでいるのと同じように、ムービーに XML を使ってデータを読み込ませているケースも頻繁に見られます。XML の利用に関しては、ActionScript 3.0 に従来より飛躍的に便利な機能がたくさん用意されています。これらの便利な機能に触れる前に、まず、XML ファイルを読み込むための基本的なコードを紹介しておきます。
var xmlSrc:String = "myData.xml";
var ur:URLRequest = new URLRequest(xmlSrc); var ul:URLLoader = new URLLoader();
ul.addEventListener(Event.COMPLETE,dataLoaded); ul.load(ur);
function dataLoaded(evt:Event):void { trace(evt.target.data); }
このコードでは、まず使用したい XML ファイルにポイントする URLRequest オブジェクトを作成し、次に URLRequest を読み込む URLLoader を作成しています。そして、COMPLETE イベント(XML の読み込み完了)のリスナーとして dataLoaded() メソッドを追加しています。dataLoaded() メソッドの中では、イベント自体の target プロパティの data プロパティにポイントすることで、XML をトレースしています。
飛躍的に便利になった XML の解析
これで、ActionScript 3.0 のすばらしい XML 機能である、ECMAScript for XML(E4X)を利用する準備が整いました(ActionScript 3.0 は国際的なオープン標準規格の ECMAScript 262 に完全準拠しています)。E4X の詳しい解説は別の機会に譲りますが、データの取り扱いが今まで以上に重要になりつつあることと、ActionScript 3.0 でこの部分が大幅に改善されていることを考慮して、ここではハイライトを紹介することにします。
ActionScript 2.0 では、デベロッパーの大半が XML の読み込みと同時に Flash データへの解析・変換を行い、処理時間とプロセッサに大きな負担がかかってしまいました。しかし、 ActionScript 3.0 と E4X を利用すれば、ノードを直に参照することができ、XML のツリー構造をファイルシステム同様の手軽さで扱うことが可能です。また、ActionScript コードのインライン上で正規表現(RegEx)のクエリを実行することも可能です。
Flash Player 9、注目の新機能
ここまでに紹介した内容を参考にすることで、ActionScript 3.0 への恐れがある程度取り除かれたかと思います。では次に、コンテンツ制作の幅をさらに広げる可能性を秘めた、Flash Player 9 のいくつかの新機能について触れることにします。
まず 1 つ目はフルスクリーンモードです。本来、このモードはビデオコンテンツ体験を JavaScript を一切触ることなく拡充する目的で開発されたものですが、もちろん、ビデオ以外のあらゆるアプリケーションでも利用することができます(ただし、キーボードからの入力は無効化されます)。
Flash CS3 で注目なのは、新しくなったビデオ再生コンポーネントにこの機能が盛り込まれていることです。これからは ActionScript に触れることなく、すばやくフルスクリーン対応のビデオアプリケーションを開発することも可能です(この場合、HTML 内の embed/object や SWFObject コードの allowFullScreen パラメータを忘れずに true に設定するよう注意してください)。この機能について詳しくは、Tracy Stampfli 氏が執筆した Flash Player デベロッパーセンター記事『Flash Player 9 のフルスクリーンモードについて』を参照してください。
もう1つの注目機能は、ミュージックビジュアライザー(Apollo 向けのAscensionアプリケーションとして公開されているようなもの)を作成する際などに活躍するオーディオスペクトラム解析機能です。新しく装備された SoundMixer クラスには computeSpectrum() という名のメソッドが含まれており、このメソッドを利用することで音楽を数値化することができます。そして、数値化されたデータを元に描画を行えば、クールなオーディオアニメーションやビジュアライザーが作成できます。この機能を紹介するとても効果的なチュートリアルについては、Peter deHaan氏のブログのエントリーを参照してください。
そして最後に…
この記事を終了する前に参考情報を収集するためのガイドを紹介したいと思いますが、その前にまず、今回まったく新しい言語が導入されたにもかかわらず、非常に包括的な Flash CS3 Professional ヘルプファイルを制作した、Flash サポートチームに対して賞賛を送りたいと思います。
ActionScript 3.0 とFlash CS3 はまだ駆け出しの段階です。したがって、まだ関連資料がそれほど多くはありませんが、今後資料が増えていくことは間違いありません。現時点でのファーストステップとしては、ActionScript 3.0 と Flash に関する最新または更新版の記事、サンプル、クイックスタートチュートリアルなどが多数掲載された、Flashデベロッパーセンターをブックマークすることをお勧めします。また、Adobe.com にて公開中のFlash CS3 LiveDocならびにFlex 2 LiveDocも参照するようにしてください。(この記事でも繰り返し参照してきたように、)これらは継続的に更新されるヘルプファイルを含む有用なリソースであり、各項目に対してはアドビのサポートスタッフや他のデベロッパーがコメントを書き込む欄も用意されています。
なお、2006年の中頃から ActionScript 3.0 と Flex 2 に関する複数の書籍と DVD を出版し、Flash コミュニティに貢献してくださった Joey Lott 氏に対して、この場を借りて Flash コミュニティの一員として個人的な謝意を告げたいと思います。これらの書籍・DVD はとても分かりやすい参考資料です。あとは、Colin Mook 氏による『Essential ActionScript 3.0』が出版されるのを待つばかりです。
いかがでしたでしょうか。この記事を読むことで、ActionScript 3.0 の概念への理解が深まれば幸いです。皆さんも、ぜひこのすばらしい最新テクノロジにチャレンジしてみてください。

