2013年1月づけでCreateJSサイトにつぎのリリース候補バージョン(release candidates)が公開されました。PreloadJSライブラリについては、これまで使われてきたライブラリと同名のクラス(PreloadJS)に替えて、LoadQueueクラスが備わりました(図001)。そこで、PreloadJSクラスが使われているスクリプトを、LoadQueueクラスにどのように書替えればよいのかについてご説明します。
図001■リリース候補のPreloadJSライブラリとLoadQueueクラス
01 script要素に読込むクラス
書替えのお題には、「PreloadJSで外部画像ファイルの読込みを待つ」のコード003を採上げます。外部画像ファイルを読込んだ後、そのイメージの情報をもとに配置しています。書替えたscript要素全体は、後にコード001として掲げます。抜書きするスクリプトの行番号はこのコード001にもとづきます。
まずは、script要素に読込むJavaScript(JS)ファイルです。クラスはPreloadJSを、LoadQueueに差替えます(第14行目)。そして、このCreateJSのバージョンではイベントをEventDispatcherクラスが扱うため、そのJSファイルも読込みます(第7行目)。
- <script src="easeljs/events/EventDispatcher.js"></script>
<!--
<script src="preloadjs/PreloadJS.js"></script>
-->
- <script src="preloadjs/LoadQueue.js"></script>
|
なお、ひとつひとつのクラスのJSファイルでなく、コンパクト(min)版をscript要素で読込んでいる場合には、easeljsとpreloadjsのバージョン(NEXTの部分)だけ変えれば、その中でクラスは差替わります。
<script src="lib/easeljs-NEXT.min.js"></script>
<script src="lib/preloadjs-NEXT.min.js"></script>
|
02 LoadQueueクラスを使う
つぎに、JavaScriptコードのPreloadJSクラスを使ったステートメントは、LoadQueueクラスの仕様にしたがって書替えます。コンストラクタは、PreloadJSクラスと同じく、XMLHttpRequestを使うかどうかをブール(論理)値で渡して呼出します。したがって、関数名を変えるだけで済みます(第25行目)。
new LoadQueue(XMLHttpRequestの使用)
- function xInitialize() {
// var loader = new PreloadJS(false);
- var loader = new LoadQueue(false);
- }
|
PreloadJS.loadFile()メソッドの引数に渡すObjectにdataプロパティを加えると、イベントハンドラが受取るイベントオブジェクトのdataプロパティとして受取れました。LoadQueue.loadFile()メソッドに渡したファイルの指定は、イベントオブジェクトのitemプロパティにオブジェクトで納められます。したがって、itemプロパティから得たオブジェクトからdataプロパティの値を取出します。
- function xInitialize() {
- var file = {src:"images/large.png", id:"image", data:position}
- var loader = new LoadQueue(false);
- loader.loadFile(file);
- }
- function xDraw(eventObject) {
// var position = eventObject.data
- var position = eventObject.item.data
- }
|
書替えたscript要素の全体はつぎのコード001のとおりです。これで、リリース候補のCreateJSのライブラリでとくに問題なく、外部画像ファイルを読込んで、ステージの真ん中に配置します。
コード001■LoadQueueクラスで読込んだ外部画像ファイルのイメージをステージ中央に置く
- <script>
- var createjs = window;
- </script>
- <script src="easeljs/utils/UID.js"></script>
- <script src="easeljs/geom/Matrix2D.js"></script>
- <script src="easeljs/geom/Point.js"></script>
- <script src="easeljs/events/EventDispatcher.js"></script>
- <script src="easeljs/events/MouseEvent.js"></script>
- <script src="easeljs/display/DisplayObject.js"></script>
- <script src="easeljs/display/Container.js"></script>
- <script src="easeljs/display/Stage.js"></script>
- <script src="easeljs/display/Bitmap.js"></script>
- <script src="preloadjs/AbstractLoader.js"></script>
- <script src="preloadjs/LoadQueue.js"></script>
- <script src="preloadjs/TagLoader.js"></script>
- <script src="preloadjs/XHRLoader.js"></script>
- <script type="text/javascript">
- var stage;
- var myBitmap;
- var canvasObject;
- function xInitialize() {
- canvasObject = document.getElementById('myCanvas');
- var position = new Point(canvasObject.width / 2, canvasObject.height / 2);
- var file = {src:"images/large.png", id:"image", data:position}
- var loader = new LoadQueue(false);
- stage = new Stage(canvasObject);
- loader.onFileLoad = xDraw;
- loader.loadFile(file);
- }
- function xDraw(eventObject) {
- var myImage = eventObject.result;
- var position = eventObject.item.data
- myBitmap = new Bitmap(myImage);
- myBitmap.x = position.x - myImage.width / 2;
- myBitmap.y = position.y - myImage.height / 2;
- stage.addChild(myBitmap);
- stage.update();
- }
- </script>
|
03 名前空間を加える
コード001で取りあえずは動きました。けれど、それだけで済まさず、来るべきスクリプティングのスタイルに装いを変えましょう。手始めは、名前空間です。すでにcreatejsという名前空間がCreateJS Suiteのクラスには加えられています。大規模な開発や複数のライブラリを使う場合に備えて、名前空間を添えることにします。そこで、名前空間を省くscript要素は除きます。
<!--
<script>
var createjs = window;
</script>
-->
|
そして、CreateJSのクラスの参照には、すべて名前空間createjsを加えます。今回のスクリプトでは、インスタンスを作成するステートメントが対象です(第6、第8〜9、第16行目)。
- function xInitialize() {
- canvasObject = document.getElementById('myCanvas');
// var position = new Point(canvasObject.width / 2, canvasObject.height / 2);
- var position = new createjs.Point(canvasObject.width / 2, canvasObject.height / 2);
// var loader = new LoadQueue(false);
- var loader = new createjs.LoadQueue(false);
// stage = new Stage(canvasObject);
- stage = new createjs.Stage(canvasObject);
- }
- function xDraw(eventObject) {
- var myImage = eventObject.result;
// myBitmap = new Bitmap(myImage);
- myBitmap = new createjs.Bitmap(myImage);
- }
|
04 イベントリスナーを使う
リリース候補のバージョンでは、EaselJSライブラリにEventDispatcherクラスが加わることも、大きな変更のひとつです。イベントが起こったときに呼出す関数は、EventDispatcher.addEventListener()メソッドでリスナーに加えます。ファイルをひとつロードし終えたというイベントは、文字列"fileload"で定めます。
オブジェクト.addEventListener(イベント, 関数)
- function xInitialize() {
// loader.onFileLoad = xDraw;
- loader.addEventListener("fileload", xDraw);
- }
|
前掲コード001に名前空間とイベントリスナーを加えたJavaScriptコードが。つぎのコード002です。なお、本稿はリリース候補のバージョンにもとづきますので、正規公開までには仕様や実装が変わる場合もあります。
コード002■名前空間とイベントリスナーを使ったPreloadJSライブラリによる外部画像の読込み
- var stage;
- var myBitmap;
- var canvasObject;
- function xInitialize() {
- canvasObject = document.getElementById('myCanvas');
- var position = new createjs.Point(canvasObject.width / 2, canvasObject.height / 2);
- var file = {src:"images/large.png", id:"image", data:position}
- var loader = new createjs.LoadQueue(false);
- stage = new createjs.Stage(canvasObject);
- loader.addEventListener("fileload", xDraw);
- loader.loadFile(file);
- }
- function xDraw(eventObject) {
- var myImage = eventObject.result;
- var position = eventObject.item.data
- myBitmap = new createjs.Bitmap(myImage);
- myBitmap.x = position.x - myImage.width / 2;
- myBitmap.y = position.y - myImage.height / 2;
- stage.addChild(myBitmap);
- stage.update();
- }
|
作成者: 野中文雄
作成日: 2013年1月23日