EaselJSは、HTML5のCanvasを使うためのJavaScriptライブラリです。Flashと同じように、Stageが頂点となる表示リストでオブジェクト(DisplayObject)を扱うため、とくにActionScriptに慣れたユーザーには使いやすく設計されています。本稿は、EaselJSライブラリによる簡単な図形の描き方をご紹介します。
01 EaselJSを使うには
まず、EaselJSのライブラリは、EaselJSのサイトからダウンロードします(図001)。開発者Grant Skinner氏のgithubのページが開きますので、ZIP圧縮されたライブラリを取得します。
図001■EaselJSサイトのDownloadリンク
展開したライブラリ「easeljs」はJavaScript用の適切な場所に置きます。本稿では、HTMLドキュメントと同じ階層にします(図002)。
図002■ライブラリ「easeljs」を適切な場所に
つぎに、EaselJSはCanvasを使いますので、そのためのコードを書きます。<canvas>要素と描画のためのJavaScriptを呼出す記述が少なくとも必要です。Canvasの基本について詳しくは、「<canvas>要素で定めた領域に図形を描く」をお読みください。
<head>
<script type="text/javascript">
function xInitialize() {
// ここに処理を記述
}
</script>
</head>
<body onload="xInitialize()">
<canvas id="myCanvas" width="240" height="180"></canvas>
|
02 まずはStageオブジェクトをつくる
前述のとおり、EaselJSは表示リストを用意してくれます。その頂点のStageオブジェクトをつくらなければなりません。Stageクラスのコンストラクタには、引数として<canvas>要素の参照を渡します。
new Stage(canvas要素)
そして、忘れずにEaselJSライブラリの必要なJavaScriptファイルを読込みます(前述のとおり、本稿ではeaseljsフォルダをHTMLドキュメントと同じ場所に置いています。)。まずはStageオブジェクトをつくるまでのスクリプトが、つぎのコード001です。alert()関数でStageオブジェクトができているかどうかを確かめています(図003)。
コード001■Stageオブジェクトをつくる
- <script src="easeljs/utils/UID.js"></script>
- <script src="easeljs/geom/Matrix2D.js"></script>
- <script src="easeljs/display/DisplayObject.js"></script>
- <script src="easeljs/display/Container.js"></script>
- <script src="easeljs/display/Stage.js"></script>
- <script type="text/javascript">
- var stage;
- function xInitialize() {
- var canvasObject = document.getElementById("myCanvas");
- stage = new Stage(canvasObject);
- alert(stage);
- }
- </script>
|
図003■alert()関数でStageオブジェクトの生成を確かめる
読込むJavaScriptファイルには、Stageクラスが継承するクラス(DisplayObjectやContainer)の他、必要なことが一見しただけではわかりにくいものもあるので、注意しましょう。また、継承するクラスなど読込む順序が変わると、初期化できない場合もあります。
03 StageにShapeオブジェクトを置いて描画する
それではStageオブジェクトの表示リストに、描画のためのオブジェクトをひとつ加えましょう。Flashと同じShapeというオブジェクトがあり、描画用のメソッドが使えます。Shapeオブジェクトをつくって表示リストに加え、その座標を定めるスクリプトはつぎのとおりです(行番号は後掲コード002のもの)。
- var myShape = new Shape();
- stage.addChild(myShape);
- myShape.x = 50;
- myShape.y = 50;
|
描画に用いるのはGraphicsオブジェクトで、ShapeオブジェクトのShape.graphicsプロパティから参照が得られます。描画の色を決めるメソッドは、塗りがGraphics.beginFill()、線はGraphics.beginStroke()です。引数のカラーはHTMLと同じ文字列で渡します。円を描くのがGraphics.drawCircle()メソッドです。Canvasに描画するため、最後にStage.update()メソッドを呼出します。
- var myGraphics = myShape.graphics;
- myGraphics.beginStroke("#0000FF");
- myGraphics.beginFill("#00FFFF");
- myGraphics.drawCircle(0, 0, 40);
- stage.update();
|
これらの処理を関数(xDraw())にして加えたのが、つぎのコード002です(第15〜25行目)。読込むJavaScriptファイルが、さらにふたつ加わりました。Canvasには塗りがシアンで線は青い半径40ピクセルの円が描かれます(図004)。
コード002■EaselJSでCanvasに円を描く
- <script src="easeljs/utils/UID.js"></script>
- <script src="easeljs/geom/Matrix2D.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/Graphics.js"></script>
- <script src="easeljs/display/Shape.js"></script>
- <script type="text/javascript">
- var stage;
- function xInitialize() {
- var canvasObject = document.getElementById("myCanvas");
- stage = new Stage(canvasObject);
// alert(stage.addChild);
- xDraw();
- }
- function xDraw() {
- var myShape = new Shape();
- var myGraphics = myShape.graphics;
- stage.addChild(myShape);
- myShape.x = 50;
- myShape.y = 50;
- myGraphics.beginStroke("#0000FF");
- myGraphics.beginFill("#00FFFF");
- myGraphics.drawCircle(0, 0, 40);
- stage.update();
- }
- </script>
|
図004■塗りがシアンで線は青い半径40ピクセルの円が描かれる
04 異なる記述方法
前掲コード002の円を描画する関数(xDraw())は、別の書き方もできます。ふたつ書替えをしましょう。第1に、Shape()コンストラクタは、引数にGraphicsオブジェクトが受取れます。ですから、新たにGraphicsオブジェクトをつくって、それをコンストラクタに渡すことにします。
第2は、Graphicsクラスの描画メソッドは、描画したGraphicsオブジェクトを返します。そのため、戻り値のオブジェクトに、さらに描画を加えることができるのです。これらふたつの書替えをした関数が、つぎのコード003です。
コード003■異なる記述による円を描く関数
- function xDraw() {
- var myGraphics = new Graphics();
- var myShape = new Shape(myGraphics);
- myGraphics.beginStroke("#0000FF").beginFill("#00FFFF").drawCircle(0, 0, 40);
- stage.addChild(myShape);
- myShape.x = 50;
- myShape.y = 50;
- stage.update();
- }
|
05 EaselJSライブラリをまとめて読込む
EaselJSを使うとき、いちいちどのJavaScriptファイルが必要か確かめるのは面倒なので、まとめて読込んでしまいたいという人もいるでしょう。そういうときのために、EaselJSのクラスをひとつにまとめたJavaScriptファイルが提供されています。ダウンロードしたlibフォルダの中のeasel.jsというファイルです(図005)。
図005■libフォルダの中のeasel.jsファイル
JavaScriptファイルはこのeasel.jsひとつを読込めば済み、読込みの順番を気にすることもありません。また、ファイルが速く読込めるように、コメントはもちろん要らない空白文字を除いてあります。その代わり、ファイルを開くととても見づらくなってしまっています。クラスを研究したり、手を加えたりしたいときは、それぞれのJavaScriptファイルを使うのがよいでしょう。
作成者: 野中文雄
作成日: 2012年2月15日