今から始めるCreateJSで実装するHTMLリッチコンテンツ
エンジニアのたかです。半年ほど前からTokyo Otaku Mode(以下 TOM)にjoinして働いています。
はじめてのブログ投稿は、CreateJSについて書いていきたいと思います。
CreateJSでTOMのロゴマークをParticleにしてみました。
クリックをすることでParticleが弾けるようになっています。はじけたParticleは指定の場所に戻ってくるようにTweenが実行されます。すべてのParticleが指定の場所に戻ると再度、細かいアメーバっぽい動きを始めます。
※ブラウザの環境によってはご覧になれない場合があります。ご了承ください。
■ CreateJSについて
CreateJS | A suite of JavaScript libraries and tools designed for working with HTML5
CreateJSはHTML5のモジュールライブラリの集まりです。
その、CreateJSを使ってcanvasアニメーションを触ってみようと思います。
まずcanvasは、HTML5から新しく実装された要素であり、JavaScriptを使い丸や四角のオブジェクトや画像、テキストを描画することができます。
グラフや3Dの描画などをFlashを使わずにJavaScriptだけで表現することができます。
JavaScriptなので、PCだけではなくスマートフォン用のWebサイトでもFlashのようなリッチコンテンツを表現することができます。
ですが、canvasで実装するコードは、単調なコードの繰り返しが多く、あまり生産性が高くありません。そこで、canvasのライブラリを使うことで、canvasをもっと気軽に扱えるようになります。
現在のcanvasライブラリだと three.js, Pixi.js, CreateJS と数多くライブラリが出ています。ライブラリにはそれぞれ特徴があり、用途や使いやすさによって使い分けるとよいです。
その中でもAdobeが運用・開発をしている CreateJS
を今回は説明をしていきたいと思います。Adobeが開発をしたライブラリなので、ActionScriptに似た書き方になっています。なので、Flashを触っていた方は比較的導入しやすいライブラリです。また、Adobe Illustratorのようなレイヤー構造管理でオブジェクトの描画順を簡単に扱えるようになっています。
CreateJSは オブジェクト描画が出来るEaselJS, Tweenアニメーションを使えるTweenJS, 音声データを扱えるSoundJS, 非同期読み込みができるPreloadJS の4つのモジュルールを集めたライブラリです。それぞれのライブラリは個別でも使用することができるので、必要な物だけを読み込ませて使用することも可能です。
以下それぞれのモジュールの説明です。
オブジェクトの描画ができ、オブジェクトをレイヤー構造管理で実装することができます。
また、EaselJS内で大切なクラスにTickerクラスがあります。Tickerクラスを使うことで、定期的にTickイベントを呼び出すことができ、アニメーションを簡単に実装させることができます。デフォルトでは30fpsで実行されます。また、CPUの負荷が高い時は設定したfpsよりも遅い感覚になることがあるので注意が必要です。
Tween Tween できます!ActionScriptと同じようにオブジェクトに簡単にアニメーションを追加させることができます。
Tweenの良さはEaseクラスにあります!Easeの種類は公式のサンプルを確認すると分かりやすいです。サンプルにもありますが固定値で使えるbackInOut
もあれば、細かい値を設定できるgetBackIn
があり色々と使いまわせることができます。
また、TweenJS内にもTickerクラスが実装されています。
音の再生が簡単に行えます。また、1つの音だけではなく、複数の音の使い分けできることが特徴です。次に説明するPreloadJSと組み合わせることで大きな音源ファイルも効率よく取得することができます。
また、createJSではないが DynamicsCompressorNode - Web API インターフェイス | MDN を使うことで簡単にイコライザーなどを作ることができます。
画像の読み込みや音楽ファイル、テキストファイルなどを非同期で読み込むことができます。また、読み込みの状況などを取得することができるので % 表示とかで読込状況を表現する実装をすることができます。
■ Sample Codes
Demo1
ボールを動かすサンプルを作成します。
sample
index.html
1 | <script src="https://code.createjs.com/createjs-2014.12.12.min.js"></script> |
※ canvas要素はstyle属性のwidth
とheight
を指定しても表示はされないです。img要素のようにcanvas要素の属性でwidth
とheight
を設定します。
canvas.js
1 | window.onload = function() { |
2行目でStageクラスにcanvas要素のidを渡してインスタンス化しています。これでcanvasを使う準備が整います。その後は必要な球体やテキスト、画像をオブジェクト化してstageクラスにaddChildすると画面に表示がされます。
Tickerイベントでメインループを回して、球体をアニメーションさせます。Tickerは指定がない場合はframerateが、20で設定されています。20は1000msの間に20回実行されることを指します。なのでframerateが20だと1000/20 = 50ms に一回実行されることになります。stage.update()
で画面を更新させるので、Tickerで実行させて毎回再描画させます。これによりボールを左から右に動くアニメーションを作ることができます。
Demo2
CreateJSのライブラリのTweenを使うと動きの幅を色々と持たせることができます。
tweenの記述は以下のようになります。
sample
canvas.js
サンプル1で作成したjsをすこし改良して以下のようにします。
1 | window.onload = function() { |
サンプル1ではボールを左から右に5pxずつ動かしてアニメーションをさせましたが、今回はアニメーションの箇所をTweenで実装をさせて動きに変化を付けさせます。
sample Tween code
1 | createjs.Tween.get(target) |
get
で実行させたいターゲットを指定します。また、optionとかも指定することができます。詳しくはTweenJS v0.6.1 API Documentation : Tweenをご確認ください。to
でアニメーションの実行の情報を記述します。第1引数に変化する形状の情報、第2引数にアニメーションの実行時間、第3引数にアニメーションのイージングを指定できます。call
でTweenアニメーションが完了した時に実行されます。
まだ、wait
や set
などの関数があります。詳しくはTweenJS v0.6.1 API Documentation : Tweenをご覧ください。
以上のように、コードをあまり書かなくてもオブジェクトの表示やTweenを実装することができます。今回はSoundJSとPreloadJSのサンプルはありませんが、同じように簡単に実装ができます。
■ TOM Logo Particle サンプルコード について
ページのトップに表示させているTOMのLogoをParticle表示させているCodeをコメント付きでのせておきます。
実装内容を簡単に説明します。初期にTOMのLogoの画像データを読み込ませて、canvas上に表示させます。その後、画像情報として読み取ります。読み取った画像情報から値を縦横7pxごとにピクセルデータのRGBの合計が700以上の箇所に、円を並べていきます。あとは、クリック処理とTween処理を実装しました。弾ける処理の箇所では、クリックした位置から遠いほど弾ける力が弱くなるように設定をしました。
また、今回のロゴではParticleの数は約2500です。これ以上Particleを増やすとカクつきが目立ってしまい綺麗なTweenになりませんでした。
canvas.js
1 | (function(){ |
■ まとめ
最後の方は駆け足になりましたが、CreateJSを使用して簡単なアニメーションを実装してみました。
また、今回は説明できませんでしたが、CreateJSにはアニメーションだけでなく、音楽再生、非同期処理に関するモジュールも含まれています。英語ですがドキュメントも充実しており、canvasを使用したリッチコンテンツを作成するために必要な環境が一通り揃っています。
さらに、CreateJSはPure JavaScriptで記述されていますので、こちらの記事(CreateJSとNode.jsを使ってサーバーサイドでCanvasを扱おう–ICS LAB)に説明されているように、Node.jsとCreateJSを使用してサーバサイドレンダリングすることもできます。
ActionScriptの代替品としても使用できる非常に強力なプログラミングツールですので、ご興味のある方は是非一度お試しください。
Tokyo Otaku Mode からのお知らせ
Tokyo Otaku Mode では現在一緒に働く仲間を募集中です!
TOMで働くことに興味がある方はこちらからご応募ください。