HTML5テクニカルノート Flash Professional CC 13.1のHTML5 CanvasドキュメントとCreateJS
Flash Professional CC 13.1から、新たなドキュメント形式として[HTML5 Canvas]が加わりました。これまでの[Toolkit for CreateJS]パネルによる[パブリッシュ]に替えて、ドキュメントからHTML5とCanvasに対応させようというものです。本稿では、FlashドキュメントをHTML5 Canvas形式に変換し、CreateJSで手を加えるまでの流れを簡単にご紹介します。 01 HTML5 CanvasドキュメントFlash Professional CCを13.1にアップデートして起ち上げると、[スタートアップスクリーン]の[新規作成]の初めに[HTML5 Canvas]が表れます(図001)。FlashなのにFlash Playerを使わない形式が先頭に来なくてもよさそうな気はしなくもありません。 図001■[スタートアップスクリーン]の[新規作成]の先頭が[HTML5 Canvas] [新規作成]で[HTML5 Canvas]を開けば、ドキュメントの[パブリッシュ設定]が[JavaScript/HTML]に定められます(図002)。[アクション]パネルには、JavaScriptが書けます。[ムービープレビュー]すれば、HTMLドキュメントとJavaScriptファイルに書き出されたコンテンツが、ブラウザで再生されます。 図002■[パブリッシュ設定]が[JavaScript/HTML]に定められる また、[ツール]や[プロパティ]などのパネルでは、HTML5 Canvasで使えない機能はグレーで示されて、選べないようになります(図003)[*1]。使えるか使えないかが目で見てわかり、うっかり用いてしまうことが防げます。 図003■[ツール]や[プロパティ]などのパネルで使えない機能は選べなくなる
02 ドキュメントの形式をFlashから[HTML5 Canvas]に変換する新しい[HTML5 Canvas]ドキュメントを簡単に試すには、手持ちのFlashムービー(FLA)ファイルが使えます。これまでの[Toolkit for CreateJS]と比べるうえでも、ActionScript 3.0のFlash Professional CCドキュメントを[HTML5 Canvas]形式に変換してみましょう。もとにするFlashムービーのメインタイムラインには、ムービークリップインスタンスをひとつ置いただけです。ムービークリップシンボルの中には、キャラクタが歩くフレームアニメーションをつくり込んであります(図004)。 図004■ムービークリップシンボルのキャラクタが歩くフレームアニメーション
書いたスクリプトは、シンボルの中のフレームアニメーションをループさせるステートメントだけです(図005)。アニメーションの初めのフレームにラベル("walk")をつけ、アニメーションの終わりでラベルのフレームに戻してループさせます。 もちろん、[アクション]パネルの中のステートメントはActionScript 3.0です。けれど、[Toolkit for CreateJS]では、ブロックコメント「/* js */」の中に書いたコードはJavaScriptとしてパブリッシュできました。この機能は、HTML5 Canvasドキュメントに変換するときも使えます。 図005■フレームアニメーションをループさせるスクリプトの記述 では、ドキュメント形式を変換します。[コマンド]メニューから[ドキュメント形式をAS3からHTML5 Canvasに変換]を選んで、変換したファイルを保存します(図006)。これで、ファイルの形式が[HTML5 Canvas]に変わります。[パブリッシュ設定]も[JavaScript/HTML]になっているはずです(前掲図002参照)。 図006■[ドキュメント形式をAS3からHTML5 Canvasに変換] ドキュメント形式を変換したとき、[出力]パネルにつぎのような警告が示されました。これは、フレームに書いてあったActionScript 3.0のスクリプトはもはや使えなくなるので、コメントアウトしたということです。
[アクション]パネルを開くと、たしかにスクリプトはコメントアウトされています(図007)。ただし、ブロックコメント「/* js */」の中のステートメントは、改めて取出されて有効になっています。[HTML5 Canvas]ドキュメントの[アクション]パネルにはJavaScriptコードを書きます。コードが正しければ、[ムービープレビュー]でループするムービークリップのアニメーションが再生できます。 図007■「/* js */」の中のステートメントがJavaScriptコードとして取出された 03 CreateJSのコードを書き加えるドキュメントの形式が[HTML5 Canvas]に変わりましたので、[アクション]パネルにCreateJSのJavaScriptコードを書き加えてみます。ムービークリップシンボルには、キャラクタの歩くアニメーションの後にもうひとつフレームアニメーションがつくってありました。キャラクタが落ちて弾む動きです(図008)。このアニメーションの頭にはやはりラベル("drop")がつけてあります。ただし、おしまいのフレームにはつぎのようなスクリプトを加えて、ループ先はキャラクタの歩くアニメーション("walk")に戻します。
図008■キャラクタが落ちて弾むアニメーション そして、このムービークリップインスタンスの初期設定用に空けておいた先頭フレームに、CreateJSのJavaScriptコードを書き加えます(図009)。歩いているキャラクタのアニメーションをマウスクリックしたら、落ちて弾むアニメーション("drop")に飛ばします。そのアニメーションが終わると、前掲JavaScriptコードにしたがってまたキャラクタは歩き始めます。 図009■初期設定のための先頭フレームにCreateJSのJavaScriptコードを書き加える インスタンスをクリックしたときに行いたいことは、ActionScript 3.0と同じくEventDispatcher.addEventListener()メソッドで、インスタンスに関数をリスナーとして加えます。マウスクリックのイベントは文字列"click"で定めます。 オブジェクト.addEventListener("click", リスナー) [アクション]パネルでthisキーワードの後にドット(.)を打つと、コードヒントが開きます(図010)。メソッド名をすべてタイプしなくても、コードヒントでハイライトしたら[return]または[Enter]キーで入力できます。また、メソッドの引数やその型も確かめられます。 図010■コードヒントでメソッドを選ぶと引数やその方も確かめられる ムービークリップシンボルの先頭フレームには、つぎのようなJavaScriptコードを書きます(図011)。インスタンスをクリックしたとき呼出されるリスナー関数(drop())は、引数に受取ったイベントオブジェクト(eventObject)のEvent.currentTargetプロパティから関数がリスナーに加えられたインスタンスの参照(_mc)を得ます。そこで、そのインスタンスの再生フレームを移して、アニメーションを切替えます。
図011■クリックしたインスタンスの再生フレームを移す これで、歩くキャラクタのインスタンスをクリックすると、上から落ちて弾み、また歩き続けるアニメーションになります(図012)。 図012■ムービークリップシンボルのキャラクタが歩くフレームアニメーション
04 パブリッシュされたファイルの中身はどうなっているか[HTML5 Canvas]ドキュメントからパブリッシュされたファイルの中身を覗いてみましょう。今回もとにしたFlashムービー(FLA)ファイルはビットマップイメージもサウンドも使わないため、書出されたのはFLAファイルと同じ名前のHTMLドキュメントとJavaScript(JS)ファイルのふたつだけです(図013)。 図013■パブリッシュされたファイル 04-01 HTMLドキュメントHTMLドキュメントが、おもな設定を行います。まず、body要素にはつぎのようにcanvas要素が加えられています(id属性"canvas")。その大きさや背景色は、Flashファイルのステージにもとづきます。そして、body要素のonload属性に、JavaScriptコードから呼出す初期化の関数(init())が定められます。
JavaScriptはすべてhead要素に加えられています。script要素全体は後にコード001としてまとめて掲げます。抜書きする行番号は、このコード001にもとづきます。まず、script要素につぎのようにCreateJSのライブラリが読込まれます(第1〜3行目)[*2]。EaselJS 0.7.0を初めとして、本稿執筆時の最新版です(図014)。なお、Flash Professionalから書出されたJSファイルも読込まれています(第4行目)。この中身は後で確かめます。
図014■2013年9月にリリースされたCreateJSの最新版ライブラリ その後のscript要素に書込まれたのは、以下のEaselJSの基本的なJavaScriptコードです。canvas要素の参照(canvas)をdocument.getElementById()メソッドでid属性("canvas")から得て、それを引数にしてStageオブジェクト(stage)をつくります(第8および第10行目)。Canvasに表示したいインスタンスは、このStageオブジェクトに子として加えます。 Flash Professionalでつくったタイムラインを構成するオブジェクトは、もうひとつパブリッシュされたJSファイルにクラスとして定められます。そして、メインタイムラインは、デフォルトではクラスが「lib.JSファイル名」になります。そのインスタンス(exportRoot)をつくって、StageオブジェクトにContainer.addChild()メソッドで子インスタンスに加えています(第9および第11行目)。 アニメーションはTickerクラスで扱うのがお約束です。イベントとして渡すのは"tick"で、リスナーにStageオブジェクトを加えると、タイムラインのアニメーションが再生されます(第14行目)。Ticker.setFPS()メソッドはフレームレートを定め、Flash Professionalでタイムラインに設定されていた値(lib.properties.fps)が渡されます(第13行目)。なお、Canvasは再描画を求めないかぎり、表示が描き替わりません。EaselJSのStage.update()はそのためのメソッドです(第12行目)[*3]。
パブリッシュされたHTMLドキュメントのscript要素全体をまとめたのが、つぎのコード001です。アニメーションをつくり込んだFlash Professionalから書出されるscript要素としては、もっとも簡素なコードでしょう。 コード001■パブリッシュされたHTMLドキュメントのscript要素
04-02 JavaScript(JS)ファイルパブリッシュされたJSファイルは、基本的にアニメーションする素材として扱います。ですから、中のコードを書替えるということはほとんどありません。ただ、Flash ProfessionalのタイムラインがJSファイルにどう書出されるのか見ておくことは、HTML5 Canvasドキュメントの仕組みを知るのに役立つでしょう。 JSファイルの中には、クラスが定められています。その冒頭に「lib.JSファイル名」で定められているのが、前述のとおりFlash Professionalのメインタイムラインに当たるクラスです[*4]。 図015■JSファイルの冒頭にメインタイムラインに当たるクラスが定められている Flash Professionalでシンボルのアニメーションはすべてシェイプでつくりました。すると、CreateJSでもEaselJSのShapeクラスを使って、ベクターグラフィックスでかたちを描きます。そのとき、メソッドによる描画は、JSファイルを軽くするため、デフォルトでは暗号のようにコード化されています(図016)。 図016■Shapeインスタンスへの描画はデフォルトではコード化されている [パブリッシュ設定]で[シェイプをコンパクト化]のチェックを外すと、描画のJavaScriptコードも読めるように書出されます(図017)。 図017■[パブリッシュ設定]で[シェイプをコンパクト化]のチェックを外すと描画のコードが読める 試みに、塗り色を定めるGraphics.beginFill()メソッドに、異なるカラー値を与えてみます。すると、そのメソッドで描いているシェイプの塗り色が変わります(図018)。 図018■塗りのメソッドに渡すカラー値によりシェイプの色が変わる このように、Flash Professionalのシェイプでつくったオブジェクトは、CreateJSでもベクターとしてJavaScriptコードにより描かれます。データを小さく抑えたいときには効果が高いでしょう。さらに、Flash Professionalは、[ライブラリ]のシンボルからスプライトシートも書出せます。この場合は、イメージがPNG画像になります。目的や用途に応じて、ベクターとラスターのどちらでも選べるということです。 もうひとつだけ、JSファイルのコードを見ておきましょう。Flash Professionalで、キャラクタのアニメーションがつくり込まれたシンボルに[アクション]パネルでJavaScriptコードを書きました(前掲図007・図011参照)。どうやらそのシンボルを定義したらしいクラス(lib.pen_animation)が見つかりました(図019)。同じJavaScriptコードが、メソッドとして定められています。 図019■Flash Professionalの[アクション]パネルに書いたコードがクラスのメソッドとして定められている コードがわかれば、JSファイルの中身を直に書替えることもできなくはありません。けれど、それが他に思わぬ影響を及ぼすこともあり得ます。前述のとおり、パブリッシュされたJSファイルは、基本的に素材として扱うのがよいでしょう。 前項03「CreateJSのコードを書き加える」では、インスタンスのクリックでアニメーションを切替えてみました。しかし、インタラクションが後で変わってくるかもしれないときは、パブリッシュする素材のコンテンツにはコードを含めず、オーサリングのJSファイルで動きを決める方がよいと思われます。
05 パブリッシュで書出されるファイル前述のサンプルで用いたFlash Professionalのファイルはシェイプのアニメーションしか含まなかったため、HTMLドキュメントとJSファイルだけが書出されました。ビットマップイメージやサウンドが入っていれば、それらは素材としてパブリッシュされます。デフォルトではイメージは「images」、サウンドは「sounds」というフォルダがJSファイルと同じ場所につくられて、それぞれフォルダの中に書出されます。そのフォルダ名は、[パブリッシュ設定]の[アセット書き出しオプション]で変えられます(前掲図020参照)。 また、前掲コード001では、CreateJSのライブラリJSファイルはCDNから読込んでいます(第1〜3行目)[*5]。これは、[パブリッシュ設定]で[ホストのライブラリ]が選ばれている(デフォルト)ためです(図021)。このチェックを外すと必要なCreateJSのライブラリが、デフォルトでは「libs」というフォルダに書出されます。このフォルダ名は[アセット書き出しオプション]の[CreateJS]に定められています。 図021■[パブリッシュ設定]で[ホストのライブラリ]が選ばれている
作成者: 野中文雄 Copyright © 2001-2013 Fumio Nonaka. All rights reserved. |
||||||||||||||||||