HTML5テクニカルノート Flash Professional CCのHTML5 CanvasドキュメントでJavaScriptコードをどこに書くか
Flash Professional CC 13.1から、新たなドキュメント形式として[HTML5 Canvas]が加わりました。そして、フレームには[アクション]パネルでJavaScriptコードが書けます。もっとも、Flashムービー(FLA)ファイルでコンテンツをすべてつくってしまうというのではなく、外部JavaScript(JS)ファイルと合わせてオーサリングすることが前提です。すると、FLAファイルのフレームとJSファイルのどちらに、どういうスクリプトを書けばよいかが問われます。 01 ムービークリップで4桁の数字を示すお題として、4桁の数字をムービークリップシンボルのインスタンスで表します。CreateJSのテキストはCanvas要素に描くため、今のところかなり機能がかぎられます。ゲームスコアのように数字だけ用いるときは、予めシェイプに分解した0から9までの数字をシンボルに納めておけば、好みのフォントやスタイルで示せます。 そこで、まず4桁の数字のムービークリップシンボル(four_digits)には、数字ひとつの子ムービークリップインスタンスを4つ並べます(図001)。それぞれのインスタンスには、左から連番の名前をつけました(digt0〜digit3)。なお、親インスタンスにも名前(four_digits_mc)をつけておきます。 図001■4桁の数字のムービークリップシンボルに数字ひとつのインスタンスを並べる つぎに、ひとつの数字の子ムービークリップシンボル(digit)には、0から9までの数字をフレームに分けて置きます(図002)。CreateJSでは、第1フレームの番号を0として数えますので、フレーム番号と数字が一致します。数字のテキストをシェイプに分解しておけば、環境にかかわらず同じスタイルの数字が示されます 図002■0から9までの数字をフレームに分けて置く このFLAファイルをもとに、HTML5とCanvasを用いて4桁の任意の数字を表示します。今フレームには、スクリプトが何も書かれていません。[パブリッシュ]すると、デフォルトではFLAファイルと同じ名前のHTMLドキュメントおよびJSファイルが書出されます(図003)[*1]。 図003■[パブリッシュ]で書出されるHTMLドキュメントとJSファイル JSファイルには、タイムラインやそこに置かれたインスタンスのシンボルをつくるためのJavaScriptコードが書かれています。そして、HTMLドキュメントのscript要素には、Canvasにステージをつくり、JSファイルから読込んだタイムラインを再現するつぎのようなコードが書込まれます。
02 外部ファイルにJavaScriptコードを書くランダムな4桁の数字を決めて、前述のインスタンスで示すJavaScriptコードはどこに書けばよいでしょうか。それは、外部JSファイルが基本となります。CreateJS開発者のGrant Skinner氏は、FLAファイルのフレームに書くのは、タイムラインの移動などのごく単純なコードのみにかぎるのがよいと述べています(Adobe Developer Connection「Flash Professional Toolkit for CreateJSのファーストステップガイド」の「ラベル、サウンド、およびタイムラインのスクリプト」の項) Flash ProでJavaScriptコードを多用することは推奨しません。...[中略]...タイムラインを制御するコード、タイムラインで行われていることのフィードバックを戻すコード...[中略]...だけに限定するようにしてください。 今回のお題なら、FLAファイルの中に1行のコードも書かずにつくることができます。ここでは、作業が簡単になるように、前掲のHTMLドキュメントのJavaScriptコードを書替えてゆきます。でき上がりのscript要素は、後にコード001としてまとめて掲げました。まず、初めに呼出される初期設定の関数(init())は、連続したアニメーションを用いませんので、つぎのようにTickerクラスの設定はコメントアウトします。その代わり、ステージがクリックされたとき(Stage.stagemousedownイベント)のリスナー関数(setRandomInt())を加えます(第8行目)。
Stage.stagemousedownイベントのリスナー関数(setRandomInt())は、4桁のランダムな数値を決めて、別に定めるつぎのような関数(setInt())で4桁の数字をインスタンス(four_digits_mc)に示します(第10〜14行目)。数字のインスタンスを引数にしたのは、同じ関数で複数のインスタンスが扱えるようにするためです。また、数字を文字列にすれば0で始まる数字が表せます。なお、FLAファイルのメインタイムラインは変数exportRootで参照します。 setInt(4桁の数字のインスタンス, 4桁の文字列の数字) また、数値を文字列の数字に変える関数(intToString())は、別につぎのように定めました(第31〜34行目)。今回桁数は4と決めたものの、第2引数で桁数が変えられるようにしてあります。 intToString(数値, 桁数)
4桁の数字をインスタンスに示す関数(setInt())は、別に定めた関数(getDigits())から4つの数字の子インスタンスを配列(digits)で受取ります(第17行目)。子インスタンスのインスタンス名(digit0〜digit3)は、予め決まっています。けれど、4桁の数字のインスタンス(instance)をいくつでも扱えるように設けました。後は、配列から取出した子インスタンスに、数字(int)をひとつずつ割当てています(第19〜22行目)[*2]。
これで、HTMLドキュメントのステージ(Canvas)をクリックするたびに、4桁のランダムな数字が示されます(図004)。script要素に書いたJavaScript全体は、以下のコード001のとおりです。JavaScriptコードがひとつにまとまりましたので、この中身さえ見ればすべての処理が捉えられます。 図004■ステージをクリックするとランダムな4桁の数字が示される
03 インスタンスのふるまいはシンボルの中のフレームに書くActionScriptであれば、インスタンスのふるまいはシンボルに定め、パーツ(コンポーネント)化するというやり方もありました。コードは他と分かれてしまうものの、インスタンスをタイムラインに置きさえすれば、直ちにメソッドで操作できます。逆に、要らなくなったらインスタンスを消すだけで、コードごと除かれます。 前掲コード001で4桁の数字のインスタンスのふるまいを、ムービークリップシンボルの中に定めてみましょう。HTMLドキュメントのscript要素は、以下のように書替えます。そして、4桁の数字を表す関数(setInt())は、つぎのようにインスタンスに対して呼出すことになります。 4桁の数字のインスタンス.setInt(4桁の文字列の数字)
前掲コード001から取出した関数(setInt()とgetDigits())の処理は、4桁の数字のムービークリップシンボル(four_digits)にフレームアクションとして移します(図005)。シンボルに合わせて手直ししたスクリプトは、除いたステートメントもコメントに残して、以下のコード002にまとめました。 図005■4桁の数字のムービークリップシンボルにフレームアクションを書く 文字列の数字をひと桁ずつ子インスタンスに定める関数(setInt())は、4桁の数字のインスタンスに対して呼出されますので、引数は文字列の数字のみになります(第3行目)。また、子インスタンスの配列は、予め変数(digits())に与えておけば済みますので、配列を返す関数(getDigits())が要らなくなります。 コード002■4桁の数字のムービークリップシンボルに書いたフレームアクション
ひとつ忘れてならないのが、インスタンスの外から呼出す関数(setInt())を自身(this)のプロパティに定めることです(第2行目)。こうしておかないと、インスタンスを参照して関数が呼出せません(詳しくは、「Flash Professional CCのHTML5 Canvasドキュメントで子インスタンスに定めた関数を呼出す」をお読みください)。 これでシンボルと、そのふるまいを扱うスクリプトがひとつのパーツになりました。ひとつのファイルにJavaScriptコードがすべてまとまっているという見通しは損なわれるものの、使い回しはしやすくなったといえます。プロジェクトの大きさや中身、進め方によって、どちらを選ぶか考えればよいでしょう。 04 インスタンスの初めの表示を定める外部ファイルとシンボルのどちらにJavaScriptコードを書くにせよ、ひとつ補っておかなければならないことがあります。4桁の数字を表すのはおそらくひとつのパーツにすぎず、コンテンツはフレームでアニメーションするかもしれません。その場合には、Tickerクラスでアニメーションを定めます。
すると、0から9までの数字をフレームにもった各桁のインスタンスが、ステージをクリックするまで、一斉にスロットマシンのように数字の切り替わるアニメーションになってしまいます。したがって、HTMLドキュメントのscript要素に定められた初期設定の関数(init())から、インスタンスの初めの表示を関数(setInt())で決めておかなければなりません。
作成者: 野中文雄 Copyright © 2001-2014 Fumio Nonaka. All rights reserved. |
|||||||||||||||||