|
||||||||||||||||||||||||||||||||||||||||
■Twitter: @FumioNonaka / Mailing List: ActionScript 3.0
F-siteセミナー「Flashユーザーが取り組むHTML5」新登場!CreateJSとは?
■サンプルファイル (Zip圧縮約184KB)
01 [Toolkit for CreateJS]の正規の使い方01-01 [Toolkit for CreateJS]からはアセットを書出す[Toolkit for CreateJS]を実際のコンテンツ制作でどう使いこなすかについて、CreateJS Suite開発者のGrant Skinner氏が「Flash Professional Toolkit for CreateJSのファーストステップガイド」で解説している。
つまり、デザイン側でFlash Professional CS6でHTML5用のアセット(パーツ)をつくって[Toolkit for CreateJS]で書出し、CreateJSのライブラリを使って開発側が仕上げるという流れのようだ。しかし、本稿ではあえてその流れに乗らず、書出されたファイルの中身に手を加えたりしながら、CreateJSの仕組みを斜めから眺めてみたい。 01-02 [Toolkit for CreateJS]の[パブリッシュ][Toolkit for CreateJS]で[パブリッシュ]するのは、素材となるインスタンスのアニメーションや背景などが単純に配置されたタイムライン(図001)。基本的なJavaScriptのインタラクションも加えられる。 図001■Flashのタイムラインに配置されたインスタンスや背景のビットマップ [ウィンドウ]メニューの[その他のパネル]から[Toolkit for CreateJS]パネルを開く(図002)。[パブリッシュ]ボタンで、Flashムービーのコンテンツが<canvas>要素を埋込んだHTMLドキュメントとJavaScriptファイルに変換されるとともに、画像やサウンドなどのアセットおよびCreateJSライブラリが書出される。 図002■[Toolkit for CreateJS]パネル 変換されたHTMLとJavaScriptのファイルはデフォルトではFLAファイルと同じ名前。JSファイルは、タイムライン上のインスタンスやそのアニメーションを再現する。アセットは画像やサウンドに分けてフォルダに書出され、CreateJSライブラリも必要なJavaScriptファイルがフォルダにまとめられる(図003)。
図003■[パブリッシュ]されたファイル群 [Toolkit for CreateJS]で書出されたパーツをもとに、CreateJSライブラリなどによりスクリプティングして、HTML5コンテンツに仕上げる(図004)。 図004■でき上がったHTML5コンテンツ 02 ビットマップを配置する02-01 タイムラインにビットマップを置いて[Toolkit for CreateJS]で[パブリッシュ]するタイムラインにビットマップをひとつ置いて(図005)、[パブリッシュ]されるファィルを確かめる。 図005■タイムラインにビットマップを置くアセットとして画像(PNG)ファイルが書出される。CreateJSライブラリのフォルダにはEaselJSとPreloadJSが納められた(図006)。 図006■書出された画像とCreateJSライブラリのファイル HTMLファイルを開けてみると、PreloadJSで画像を先読みするスクリプトが加わっているため、これではまだわかりにくい(図007)。 図007■HTMLファイルはPreloadJSで画像を先読みしている 02-02 空のタイムラインから[パブリッシュ]したCanvasに外部画像を読込んで描くタイムラインに何もなくても、[Toolkit for CreateJS]は<canvas>要素とEaselJSが組込まれた最小限のファイルを[パブリッシュ]する(コード001)[*1]。入れ子の階層(表示リスト)のトップにはStageオブジェクトがつくられ、addChild()メソッドで子インスタンスが加えられる。 コード001■<canvas>要素とEaselJSが組込まれたHTMLドキュメント
addChild()メソッドでStageオブジェクトの子に加えられているインスタンスの替わりに、外部画像ファイルを置いてみる。このインスタンスは、Bitmapクラスでつくる。位置座標はプロパティxとyで定められる。 new Bitmap(画像ファイルのURL) つぎのコード002(<script>要素)は、外部から読込んだ画像のイメージをCanvasの中央に描く。ただし、画像の基準点は左上角になる(図008)。 コード002■外部画像ファイルを読込んでCanvasに描く
図008■読込んだ画像がCanvas中央を基準点にして描かれる 02-03 インスタンスの基準点を変えるプロパティEaselJSには、インスタンスの基準点を変えるプロパティとしてregXとregYがある。画像の幅と高さの半分の値をそれぞれのプロパティに設定すれば、基準点はインスタンスの中心になる。読込んだ画像(Imageオブジェクト)の参照は、Bitmapインスタンスのimageプロパティで得られる。つぎのコード003のように2行のステートメントを加えれば、インスタンスの中心を基準点に直して、Canvas中央に描くことができる(図009)[*2]。 コード003■Bitmapインスタンスの中心を基準点にする
図009■読込んだ画像がCanvasの中央に描かれる 02-04 インスタンスを水平にスクロールするアニメーションCreateJSは、Flashと同じフレームという考え方をアニメーションに採入れている。そのときに使われるのがTickerというオブジェクトだ。Tickerを働かせると、対象となるオブジェクトに定めたtick()という関数が毎フレーム呼出される[*3]。
つぎのコード004は<script>要素の中にticker()関数(イベントハンドラ)を定め、Bitmapインスタンスを水平にスクロールする(図010)。なお、インスタンスがステージの端を超えると、反対側の端に移動している(第15〜21行目)。 コード004■インスタンスを水平にスクロールする
図010■読込まれた画像が水平にスクロールする 補っておくべきことがふたつある。第1に、CreateJSでは画面を書替えるためには、必ずStageオブジェクトに対してupdate()メソッドを呼出さなければならない(コード004第11および20行目)。 第2に、ticker()関数を定めたオブジェクトは、Ticker.addListener()メソッドの引数に渡してリスナーに加えないと、関数が呼出されない。<script>要素に関数を定めたときは、windowオブジェクトを引数として渡す(コード004第13行目)。
03 CreateJSでマウスイベントを扱う03-01 タイムラインに置いたインスタンスにマウスクリックのハンドラを定めるFlashのタイムラインにアニメーションするムービークリップインスタンスを置いて、そのマウスクリックで行う処理をCreateJSで書いてみる。まず、予めFlashでインスタンスには名前をつけておく(図012)。 図012■Flashのタイムラインに置いたインスタンスに名前をつける[Toolkit for CreateJS]で[パブリッシュ]してJSファイルを開くと、ステージ上のインスタンスとそのシンボルを扱うためのCreateJSのスクリプトが書かれている(図012)。インスタンスのアニメーションのほか、シェイプもJavaScriptで描かれる。Flashでつけたインスタンス名はそのまま使われている。 図012■JSファイルはステージ上のインスタンスとそのシンボルを扱う Flashのタイムラインの階層(表示リスト)はCreateJSで同じように扱える。Stageオブジェクトに加えられたインスタンスがメインタイムラインに当たるので、そこからターゲットパスを定めればインスタンスが参照できる。
インスタンスをクリックしたときの処理は、onClickイベントに関数(ハンドラ)を定めて行う。 クリックするオブジェクト.onClick = 関数 以下のコード005は、Flashのタイムラインに置いたムービークリップインスタンスがクリックされたときのイベントハンドラを定めた(第9行目)。インスタンスは扱いやすいように、変数を定めて代入した(第2および8行目)。イベントハンドラの関数(clickHandler())は、インスタンスの位置を下げている(第14〜17行目)。これでインスタンスは、クリックされるたびに位置を下げて行く(図013)。 コード005■インスタンスをクリックすると位置が下がる
図013■インスタンスをクリックするたびに位置が下がる イベントハンドラ(コード005第14〜16行目)の中にStageオブジェクトに対するupdate()メソッドの呼出しがないくてよいのか、疑問に感じたもしれない。しかし、[Toolkit for CreateJS]から[パブリッシュ]したときすでにインスタンスがアニメーションしていたことから想像できるとおり、内部的にフレームごとの画面の描替え(update()メソッドの呼出し)はすでに組込まれていたのだ[*4]。 03-02 インスタンスをドラッグするマウスドラッグはonMouseMoveイベントのハンドラで扱う。ただし、そのイベントはステージに表示されているインスタンスではなく、MouseEventオブジェクトが受取る。そして、MouseEventオブジェクトは、クリック(onClick)などのマウスイベントに定めたハンドラに引数のイベントオブジェクトとして渡される。つまり、マウスイベントのハンドラが受取ったイベントオブジェクトにonMouseMoveイベントのハンドラを定めるのだ。 ドラッグが始まるのは、マウスボタンを押したそのときだ。これはonPressイベントになり、ハンドラはマウス操作をするインスタンスに設定する。さらに、マウスボタンを放すイベントはonMouseUpで、こちらはイベントオブジェクトにハンドラを定めなければならない。下表001にまとめておこう。 表001■マウスイベントとハンドラ設定先
マウスポインタの座標は、イベントハンドラが受取ったMouseEventオブジェクトのstageXとstageYプロパティで調べる。それぞれの値は、ステージから見た座標となる。 すると、<script>要素に書くインスタンスをドラッグするJavaScriptは、以下のコード006のとおりだ。インスタンスの上でマウスボタンを押したとき(onPressイベント)、ドラッグを始めるハンドラ(pressHandler())を呼出す(第9行目)。 ドラッグを始める関数(pressHandler())は、インスタンスをドラッグするための関数(dragHandler())とその終了の関数(releaseHandler())を、それぞれMouseEventオブジェクトのonMouseMoveおよびonMouseUpイベントのハンドラに定めている(第15〜16行目)。 そして、ドラッグ動作のイベントハンドラ(dragHandler())は、インスタンスの位置をマウスポインタの座標に動かす(コード006第15〜16行目)。これで、インスタンスがドラッグできる(図014)[*5]。 コード006■インスタンスをドラッグする
図014■インスタンスがドラッグできる onMouseMoveイベントは、ハンドラを定めたインスタンスの上でマウスボタンを押したまま動かしたときに起こる。したがって、マウスボタンを放したとき(onMouseUpイベント)の処理はとくに加えなくても、ドラッグ&ドロップは正しく行える。けれど、ドラッグを始める関数(pressHandler())で設定したハンドラがそのまま残っていると、後で予期しない問題の原因にもなりかねない。 そこで、onMouseUpイベントのハンドラ(releaseHandler())は、要らなくなったハンドラのイベントにnullを代入して、イベントハンドラの設定を解除している(コード006第23行目)[*6]。これで、コンテンツは初めの状態に戻る。
参考リンクAdobe Flash Professional Toolkit for CreateJSCreateJS Suite
CanvasJavaScript作成者: 野中文雄 Copyright © 2001-2012 Fumio Nonaka. All rights reserved. |
||||||||||||||||||||||||||||||||||||||||