これからのWebはHTML5だ。とはいわれるものの、
そこで本連載では、
また、
ということで、
お題:読込んだ画像をランダムにトゥイーンアニメーションさせる
早速、
お題のjsdo.
長いコードのほとんどは、
なお、
画像ファイルを読込んでCanvasに描く
では、
まず、
<script src="http://code.createjs.com/easeljs-0.5.0.min.js"></script>
<script src="http://code.createjs.com/preloadjs-0.2.0.min.js"></script>
つぎに、
<body onLoad="initialize()">
<canvas id="myCanvas" width="240" height="180"></canvas>
</body>
そして、
new createjs.Stage(canvas要素)
canvas要素の参照はJavaScriptのdocument.
var stage;
function initialize() {
canvasObject = document.getElementById("myCanvas");
stage = new createjs.Stage(canvasObject);
}
PreloadJSライブラリでは、
- PreloadJSオブジェクトをつくる
- ファイルが読み込み終わったとき呼び出す関数
(ハンドラ) を定める - ファイルを読込む
まず、
PreloadJSオブジェクト = new createjs.PreloadJS(XMLHttpRequestの使用)
つぎに、
PreloadJSオブジェクト.onFileLoad = ハンドラ
そして、
PreloadJSオブジェクト.loadFile(ファイルのURL)
PreloadJSライブラリを用いた処理も、
function initialize() {
var file = "images/Pen.png";
var loader = new createjs.PreloadJS(false);
loader.onFileLoad = draw;
loader.loadFile(file);
}
ファイルを読み込み終えたとき呼び出される関数
まず、
Bitmapオブジェクト = new createjs.Bitmap(Imageオブジェクト)
つぎに、
Stageオブジェクト.addChild(子オブジェクト)
そして、
Stageオブジェクト.update()
画像イメージをステージに描くため、
var myBitmap;
function draw(eventObject) {
var myImage = eventObject.result;
myBitmap = new createjs.Bitmap(myImage);
stage.addChild(myBitmap);
stage.update();
}
ここまでご紹介したJavaScriptコードで、
この後トゥイーンアニメーションするには、
Canvasの大きさは、
Bitmapインスタンスの基準点は、
基準点のxy座標を決めるプロパティは、
var bottom;
function initialize() {
canvasObject = document.getElementById("myCanvas");
bottom = canvasObject.height;
}
function draw(eventObject) {
var myImage = eventObject.result;
var halfWidth = myImage.width / 2;
var halfHeight = myImage.height / 2;
myBitmap.regX = halfWidth;
myBitmap.regY = halfHeight;
myBitmap.x = halfWidth;
myBitmap.y = bottom / 2;
}
これで読込まれた画像イメージをもつBitmapオブジェクトが、
<script src="http://code.createjs.com/easeljs-0.5.0.min.js"></script>
<script src="http://code.createjs.com/preloadjs-0.2.0.min.js"></script>
<script>
var stage;
var myBitmap;
var bottom;
function initialize() {
canvasObject = document.getElementById("myCanvas");
var file = "images/Pen.png";
var loader = new createjs.PreloadJS(false);
bottom = canvasObject.height;
stage = new createjs.Stage(canvasObject);
loader.onFileLoad = draw;
loader.loadFile(file);
}
function draw(eventObject) {
var myImage = eventObject.result;
var halfWidth = myImage.width / 2;
var halfHeight = myImage.height / 2;
myBitmap = new createjs.Bitmap(myImage);
myBitmap.regX = halfWidth;
myBitmap.regY = halfHeight;
myBitmap.x = halfWidth;
myBitmap.y = bottom / 2;
stage.addChild(myBitmap);
stage.update();
}
</script>
オブジェクトをトゥイーンアニメーションさせる
いよいよTweenJSライブラリを使ったトゥイーンアニメーションだ。左端に置いたインスタンスを、
createjs.Tween.get(オブジェクト).Tweenのメソッド(設定).Tweenのメソッド(設定).…
なお、
今回は、
createjs.Tween.get(オブジェクト).to(プロパティ指定のオブジェクト, 時間, イージング関数)
Tween.
{プロパティ:値, プロパティ:値, …, プロパティ:値}
ただ、
new createjs.Point(x座標, y座標)
Tween.
トゥイーンするプロパティのx座標値
var right;
function initialize() {
canvasObject = document.getElementById("myCanvas");
right = canvasObject.width;
}
function draw(eventObject) {
var myImage = eventObject.result;
var halfWidth = myImage.width / 2;
right -= halfWidth;
setTween(myBitmap, new createjs.Point(right, bottom / 2), 3000, createjs.Ease.bounceOut);
}
function setTween(target, myPoint, time, easing) {
createjs.Tween.get(target)
.to({x:myPoint.x, y:myPoint.y}, time, easing);
}
もっとも、
EaselJSはアニメーションのため一定の時間間隔で繰返し処理する仕組みをもつものの、
おそらく無駄な負荷を省くため、 画面はStage. update() メソッドで描き変える。
TweenJSライブラリがいくらオブジェクトのプロパティを変更しても、
createjs.Ticker.addListener(オブジェクト)
呼び出す関数はtick()という決まった名前で定める。今回は、
function draw(eventObject) {
createjs.Ticker.addListener(window);
}
function tick() {
stage.update();
}
これでステージ左端に置かれたインスタンスが、
<script src="http://code.createjs.com/easeljs-0.5.0.min.js"></script>
<script src="http://code.createjs.com/preloadjs-0.2.0.min.js"></script>
<script src="http://code.createjs.com/tweenjs-0.3.0.min.js"></script>
<script>
var stage;
var myBitmap;
var bottom;
var right;
function initialize() {
canvasObject = document.getElementById("myCanvas");
var file = "images/Pen.png";
var loader = new createjs.PreloadJS(false);
right = canvasObject.width;
bottom = canvasObject.height;
stage = new createjs.Stage(canvasObject);
loader.onFileLoad = draw;
loader.loadFile(file);
}
function draw(eventObject) {
var myImage = eventObject.result;
var halfWidth = myImage.width / 2;
var halfHeight = myImage.height / 2;
right -= halfWidth;
myBitmap = new createjs.Bitmap(myImage);
myBitmap.regX = halfWidth;
myBitmap.regY = halfHeight;
myBitmap.x = halfWidth;
myBitmap.y = bottom / 2;
stage.addChild(myBitmap);
stage.update();
setTween(myBitmap, new createjs.Point(right, bottom / 2), 3000, createjs.Ease.bounceOut);
createjs.Ticker.addListener(window);
}
function setTween(target, myPoint, time, easing) {
createjs.Tween.get(target)
.to({x:myPoint.x, y:myPoint.y}, time, easing);
}
function tick() {
stage.update();
}
</script>
Easeクラスのイージングを定めるメソッドには、
これで、
