EaselJS のSpriteSheet, Sprite を使ってスプライトアニメーション [CreateJS]
EaselJS のSpriteSheet, Sprite を使ってスプライトアニメーション [CreateJS]
png, jpg, svg などでスプライトシートを作っておけば、 SpriteSheetクラスとSpriteクラスでスプライトアニメーション を生成できる。
CreateJS のバージョン
使用したCreateJSのバージョン
-
EaselJS 0.8.1
-
TweenJS 0.6.1
サンプル
スプライトシートでblinkアニメーション
スプライトシートを用意
jpg, png, svg で作っておきます。 1フレームのwidth とheight をそれぞれ固定して 並べておきます。
今回は、1フレームを128×128 として、 10フレーム用意したので、 1280×128のスプライトシートです。
Inksacape で、目を垂直方向に10%ずつ縮小して作りました。
SpriteSheetクラス
SpriteSheetクラスで、用意したスプライトシート画像を読み込み、 どのフレームを使うかなどアニメーションの設定を行う。
Doc: EaselJS v0.8.1 API Documentation : SpriteSheet
-
imagesプロパティ
読み込むスプライトシート画像を設定する。 複数読み込めるので配列で指定する。
images: ['img/spritesheet.svg']
-
framesプロパティ
スプライトシートの1フレームのwidth, height、 基準位置(regX, regY)など を設定する。
var frame_width = 128; var frame_height = 128; frames: { width: frame_width, height: frame_height, regX: frame_width/2, regY: frame_height/2 }
1フレームのサイズが異なる場合でも 設定できる。 2次元配列のようにして設定できるようだ。
frames: [ // x, y, width, height, imageIndex*, regX*, regY* [0, 0, 96, 64, 0], [97, 65, 64, 64, 1, 32, 32] ]
-
animationsプロパティ
アニメーションの名前とどのフレームを使用するかアニメーションの 設定ができる。 10フレームあるとき、0 - 9 のindex を指定できる。
設定方法は3種類。
-
1フレームの指定の場合は、indexのみ。
animations: { sit: 0 }
-
複数フレーム指定の場合は、 配列の0番目にstartのindex と 1番目にendのindex を指定する。 オプションとして、 next で次のアニメーションと speed を設定できる。
animations: { // start, end, next*, speed* run: [0, 5], jump: [6, 12, "run", 1.5] }
-
同じフレームを何回も指定するなど 複雑なアニメーションを指定する場合。 アニメーションの名前に 配列でなく、オブジェクト持たせる。
framesプロパティにアニメーションのframe index の配列を指定する。 オプションとして、 next プロパティに次のアニメーションの名前、 speedプロパティに速度を指定する。
animations: { walk: { frames: [0, 1, 2, 2, 1, 0] }, shoot: { frames: [0, 3, 4, 5], next: "walk", speed: 0.5 } }
-
-
framerateプロパティ
フレームレートを設定できる。
framerate: 30
今回の瞬き(blink)アニメーションSpriteSheetの設定のコード を書いておく。
var file = '~~~.svg';
var data = {
images: [file],
frames: {
width: frame_width,
height: frame_height,
regX: frame_width/2,
regY: frame_height/2
},
animations: {
//animation_name
blink: {
frames: [
0, 0, 0, 0, 0, 0
],
next: 'closing',
speed: 0.05
},
closing: {
frames: [
1, 1, 1, 1, 1,
2, 2, 2, 2,
3, 3, 3,
4, 4,
5, 5,
6, 6, 6,
7, 7, 7, 7,
8, 8, 8, 8, 8
],
next: 'closed',
speed: 1.2
},
closed: {
frames:[
9, 9, 9, 9, 9, 9
],
speed: 0.8,
next: 'opening'
},
opening: {
frames: [
8, 8, 8, 8, 8,
7, 7, 7, 7,
6, 6, 6,
5, 5,
4, 4,
3, 3, 3,
2, 2, 2, 2,
1, 1, 1, 1, 1
],
speed: 1.2,
next: 'blink'
}
},
framerate: 30
};
// spriteインスタンス
var mySpriteSheet = new createjs.SpriteSheet(data);
Spriteクラス
SpriteSheetクラスから生成できる。 SpriteクラスのコンストラクタにSpriteSheetクラスを与えて生成できる。
Doc: EaselJS v0.8.1 API Documentation : Sprite
var mySprite = new createjs.Sprite(mySpriteSheet);
stage.addChild(mySprite);
stage.update();
Sprite.gotoAndPlay('animation_name');
で アニメーションの開始、 Sprite.gotoAndStop('animation_name');
でアニメーションの停止ができる。
var mySprite = new createjs.Sprite(mySpriteSheet);
~~~
mySprite.gotoAndPlay();
参考リンク
-
第12回 スプライトシートでアニメーションをつくる:HTML5のCanvasでつくるダイナミックな表現―CreateJSを使う|gihyo.jp … 技術評論社
-
EaselJS v0.8.1 API Documentation : Sprite
関連リンク