Flashの今回のバージョンアップで,一番大きな変更点と感じるのは,ActionScript3.0が搭載された点です。ActionScript3.0は,ActionScript2.0に比べ,非常に整理された言語となっています。
“整理整頓”されてわかりやすくなった言語仕様
ActionScriptはもともと,Flashムービーにインタラクティブ性を持たせる「アクション」機能の延長線上として開発されてきたために,タイムラインですとか,ムービークリップですとか,Flash独特のパーツが前提となった,一種の「触っている人でないとわかりにくい業界用語の集まり」のような面がありました。また,ActionScript2.0では,「イベント処理」を実現させるための手段が何パターンか混在している(*6)等,あまり言語的に整理整頓されているわけではありませんでした(*7)。
また,ムービークリップを管理する「MovieClipクラス」に多くのプロパティやメソッドが集まっており,他言語に比べると「なんでもかんでもMovieClipに詰め込みすぎじゃない? そのせいで,いったい何を使えば目的の処理ができるのか探すのが大変。たぶんMovieClipクラスのどこかの機能なんだろうけど」と,いうような感覚でもありました。
上記のような,ちょっと散らかっている部屋のような言語が,ActionScript3.0になると,かなり整理整頓されました(表2)(*8)。
ActionScript2.0で混乱していた点 | ActionScript3.0で整理された点 |
---|---|
複数のイベント処理に対する記述方法の混在 | DOM3イベントモデルに基づき,統一された記述方法になった |
MovieClipクラスへのプロパティ・メソッドの集中 | 処理に応じたわかりやすいクラス名のクラスに分散した |
「深度」という概念と深度の管理 | 深度管理を自動化した |
絵を表示したいだけなのに,「タイムライン」という概念のある「ムービークリップ」を作成しなくてはならないという,少しもったいないような,負荷の高そうな印象のある操作 | 「スプライト」という概念(Spliteクラス)の導入により,単に絵を表示する場合には,ムービークリップよりも「軽い」スプライトを使用できるようになった |
createEmptyMovieclipメソッド,attachMovieメソッド等,画面にインスタンスを配置する手段の混在 | addChildメソッド,removeChildメソッド等,整理・統一されたメソッドになった |
「_xプロパティ」と「xプロパティ」等,同じ用途のプロパティのはずなのに,クラス間で微妙に表記が揺れている | プロパティ名の表記が整理・統一された |
イベントハンドラメソッド実行時のスコープの混乱 | レキシカル環境への参照の保持がされるようになった |
また,以前から「こういうことできたら面白そうなのになあ」「こういう書き方ができると便利なのになあ」というような処理も,追加されたクラス等を使用して作成できるようになりました(表3)。
ActionScript3.0でできるようになったこと | 用意されたもの |
---|---|
スクリプトからのフレームレートの変更 | Stage. frameRateプロパティ |
スクリプトからの「シーン」の利用 | Sceneクラス |
スクリプトを使ったアニメーションの簡易化 | Animatorクラス |
XMLデータへの簡単なアクセス | XMLクラスの大幅な変更(E4Xの実装)(*9) |
正規表現を使った処理 | RegExpクラス |
バイナリデータの読み書き(*10) | ByteArrayクラス |
サウンド波形の取得 | SoundMixerクラス |
タイマー処理 | Timerクラス |
関数定義時における,任意の数の引数を受け取るインタフェース | function traceParams(... rest) { trace(rest); }という形でのパラメータの受取が可能に |
定数の作成 | constステートメント |
ファイナルクラス,ファイナルメソッドの作成 | finalステートメント |
コレクション内のアイテムに対する,インデックス値を使用しないループ処理 | for each..in ステートメント |
AS3.0としてのトゥイーンのコピーが可能に
アニメーションを作成する際に,とても便利になった機能が「ActionScript3.0(AS3.0)としてのトゥイーンのコピー」機能です。これはどういう機能なのかというと,Flashのタイムラインで作成したトゥイーンの動きを,そのままコードとしてコピーしてしまう機能です。前回は,一つの文字のトゥイーンの動きを,コピーして他の文字へと適用する機能をご紹介しましたが,その機能をスクリプトとして再現したような機能です。タイムラインで作成したトゥイーンの動きをコードとして[アクションパネル]に張り付けると,図16のようになります(*11)。
図16:トゥイーンの動きをコードとしてコピー
コードの内容はというと,トゥイーンの動きをxml表現で表し,新設された「Animatorクラス」の一つのインスタンスとして作成するものです。
このAnimatorクラスは,
new Animator(xml, インスタンス名);
というコードで任意のインスタンスに,xml表現としてペーストされたトゥイーンの動きを関連付けます。さらに,
Animator.play()
とすれば,そのインスタンスを指定したトゥイーンの動きでアニメーションさせます。つまり,一つ「定番の動き」となるアニメーションを作成し,それをコードとしてコピーしてしまえば,あとは,
var motionXML:XML = //ここは自動で作成 //mc1~mc5にモーションを関連付ける var ani1:Animator = new Animator(motionXML,mc1); var ani2:Animator = new Animator(motionXML,mc2); var ani3:Animator = new Animator(motionXML,mc3); var ani4:Animator = new Animator(motionXML,mc4); var ani5:Animator = new Animator(motionXML,mc5);
のようにして,簡単に複数のインスタンスにモーションを関連付けることができます。あとは,ボタンを押す等のユーザーの操作に応じて,
ani1.play();
としてあげれば,指定したインスタンスが,コピーしておいたモーションで動き出すというわけです。
「作業の分担」という観点からみると,「モーションを作る人」は,タイムライン上で試行錯誤しながらトゥイーンアニメーションを作成し,そのファイルを「コードを書く人」に渡します。コード担当者は,その動きをAS3.0のコードとしてコピーし,動かしたいインスタンスへと割り当てる,といった切り分けができるようになりますね。
インスタンスを入れ替えて,同じ動きをさせたいような処理も,非常に作成しやすくなりました。