SlideShare una empresa de Scribd logo
1 de 41
Descargar para leer sin conexión
Canvas Animation
tsukasa
SHIFTBRAIN frontend developer
oneslocus
tsukasa-web
locus-dw.com/blog
Canvas?
<canvas></canvas>
<canvas></canvas>
fillRect
arc+fill
drawImage
shadowBlur
fillText
<見えないニャン
clearRect
ア ッ
Animation?
fillRect
x=0,y=0
clearRect
fillRect
x=30,y=0
消して描いての繰り返し
場合によっては消さずに
上書きしても大丈夫
⃝⃝だけClearはできない。
消したいなら次Drawしなければいい。
Clear and Draw
setTimeout
requestAnimationFrame
requestAnimationFrame
• ブラウザ側でアニメーションが更新できる準備が整っ
たときに実行
• 別タブに移っても大量にスタックされない
• 完全な間隔調整はできない
• fpsは経過時間を用いてある程度操作可能
https://github.com/tsukasa-web/myFuncs_coffee/blob/master/
RAFhandler.coffee
RAFhandler
Easing Function
http://gizma.com/easing/
Math.easeInQuad	
  =	
  function(t,b,c,d){	
  
	
   t	
  /=	
  d;	
  
	
   return	
  c*t*t	
  +	
  b;	
  
};
• t = 今の時間
• b = アニメーション開始時の値
• c = アニメーション終了時の値
• d = アニメーションの長さ
Use
$.animate or Tween Engine
$(変数).stop().animate({x:100}, {

duration: duration

easing: easing

progress: 処理関数

})
progressはstepでもOK
stepはプロパティ毎に、progressはプロパティの数に
関係なくアニメーション要素毎に一度だけ呼び出される
合成処理やアルファ値の設定、
画像の描画領域の設定など、色んな処理の組み合わせで
自由にアニメーションを作ってみよう!
Optimization
拡大縮小しないシェイプやテキストを使い回すなら
画像としてキャッシュしよう
シェイプ ビットマップ
.toDataURLなど
描くメソッド 描くメソッド
arc+fill drawImage
軽い重い
描画する数は少ない方がいい。
つまり、グループ化できるものは画像化しちゃおう
画像化
軽い重い
ニャン
4回も描画してる
ニャン
1回の描画で済む
• 大量のオブジェクトを管理するのが大変
• マウスイベント等のイベント管理が面倒…
スクラッチで書くと容量が軽く済む。
けど面倒なことも多い。
Library
EASEL JS
一番ベーシックで使いやすい。
• レイヤーのように管理できる
• フィルターが便利!(重いのもあるで使い方に注意)
• webGLモード搭載(制限が多い)、
requestAnimationFrame設定もお手のもの
• Tween.jsやPreload.jsも便利だよ!(個別に使っても
便利だよ!)
• プラグインを含め、とにかく多機能
• 先日の大型アップデートで結構かゆいとこに手が届
くように
pixi.js
先日のCreateJS勉強会で実力が広まったライブラリ。
2D+webGLが得意。グラフィックの描画が少し苦手?
• レイヤーのように管理できる
• フィルターが便利!(重いのもあるで使い方に注意)
• webGLモード搭載(制限は少ない模様)
• アニメーション周りは自分で書く
• かなり滑らか
得意分野を見極め、使い分ける(両方使うのもアリ)ことで
超ぬるぬるアニメーションが実現できる
共通して言えることはSpriteSheetとcacheが
高速化のキーになる。
• http://www.goodboydigital.com/pixijs/examples/3/
• http://ics-web.jp/projects/shared-drawing/
Use Library
or
Scratch
example
• http://devjam.net/demo/snowsample_01/
• http://devjam.net/demo/filmsample_02/
• http://devjam.net/demo/splitsample_02/
• http://devjam.net/demo/gradientsample_02/
DEVJAM
http://devjam.net/about

Más contenido relacionado

Destacado (6)

Createjsについて@jsCafe20
Createjsについて@jsCafe20Createjsについて@jsCafe20
Createjsについて@jsCafe20
 
フォントをつくるサイトで使ったCanvasとSVGの話 @HTML5飯
フォントをつくるサイトで使ったCanvasとSVGの話 @HTML5飯フォントをつくるサイトで使ったCanvasとSVGの話 @HTML5飯
フォントをつくるサイトで使ったCanvasとSVGの話 @HTML5飯
 
知らないと損するアプリ開発におけるStateMachineの活用法(15分版)
知らないと損するアプリ開発におけるStateMachineの活用法(15分版)知らないと損するアプリ開発におけるStateMachineの活用法(15分版)
知らないと損するアプリ開発におけるStateMachineの活用法(15分版)
 
VC「もしかして...」Model「私たち...」「「入れ替わってるー!?」」を前前前世から防ぐ方法
VC「もしかして...」Model「私たち...」「「入れ替わってるー!?」」を前前前世から防ぐ方法VC「もしかして...」Model「私たち...」「「入れ替わってるー!?」」を前前前世から防ぐ方法
VC「もしかして...」Model「私たち...」「「入れ替わってるー!?」」を前前前世から防ぐ方法
 
Android cleanarchitecture
Android cleanarchitectureAndroid cleanarchitecture
Android cleanarchitecture
 
あのアニメのOp,edっぽいアニメーションを実装する話
あのアニメのOp,edっぽいアニメーションを実装する話あのアニメのOp,edっぽいアニメーションを実装する話
あのアニメのOp,edっぽいアニメーションを実装する話
 

Canvas tutorial