2011-05-15
canvas のアニメーション高速化ノウハウいろいろ
これはなに?
- canvas を色々いじってみて取得したノウハウをまとめてみました
- そこそこいじれば、パーティクル 300 個くらいなら ネットブックでもそれなりに動くようです
- サンプル : http://dl.dropbox.com/u/1094808/particles.html
- 弾幕シューとかも無理ではなさそう...?
毎回描画するより、putImageData の方が早い
- 必要な図形を初回処理で書いて、getImageData を使って、ImageData オブジェクトを作っておく
ctx.getImageData(left, top, x_size, y_size)
- ただし、putImageDataは、globalCompositeOperation を無視する
- あと、Firefox 3.6.17 現在 描画領域からはみ出すような putImage を行うと例外が発生する
- 4.x 系は未調査
drowImage の Firefox 特有のバグ
- putImageDataより複雑な事ができるメソッド
- globalCompositeOperation に従ってくれるので、基本的には putImage よりこっちを使うことの方が多そう
- ただし、Firefox では、getImageData で取得した ImageData をそのまま渡すと例外が発生するバグがある
- なので、非表示の canvas に putImageData してから、canvas そのものを drowImage しないといけない
var spriteCanvas = document.createElement('canvas'); spriteCanvas.setAttribute('width', size*2); spriteCanvas.setAttribute('height', size*2); var imageData = ctx.getImageData(0, 0, size*2, size*2); spriteCanvas.getContext('2d').putImageData(imageData, 0, 0);
非表示の canvas をバッファにして、最後にまとめて 表示用の canvas にコピーしても速度は上がらない
- ゲームとかだと良くやる手だけど、非表示の canvas に描画するときもおんなじ処理をしているっぽい
- でかいサイズのコピーを行う分、むしろ重くなってる?
参考リンク
- http://www.html5.jp/canvas/
- canvas の API のドキュメント
- 今更聞けないcanvasの基礎の基礎
- 基礎的なところをざっくりと紹介している
- FPS を使った描画速度の制御が参考になりました
トラックバック - http://d.hatena.ne.jp/kasei_san/20110515/p1
リンク元
- 37 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cts=1331111485212&ved=0CCoQFjAA&url=http://d.hatena.ne.jp/kasei_san/20110515/p1&ei=OSZXT7eIGMuJmQXp_uS4Dw&usg=AFQjCNEBdz0x3qsPPhp6pYxL3nC2GG1uQQ&sig2=MgPFFcJDaZD2Wh5Knsh6yw
- 37 http://www.google.co.jp/url?sa=t&rct=j&q=canvas 高速化&source=web&cd=2&ved=0CCQQFjAB&url=http://d.hatena.ne.jp/kasei_san/20110515/p1&ei=E8KiTsG2Cs-NmQXWlpGgCQ&usg=AFQjCNEBdz0x3qsPPhp6pYxL3nC2GG1uQQ&sig2=7MyGoQQ2G_-r_0lAf
- 35 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=2&cts=1331083655690&ved=0CDkQFjAB&url=http://d.hatena.ne.jp/kasei_san/20110515/p1&ei=dblWT8DVGc3HmQX9hoTdCQ&usg=AFQjCNEBdz0x3qsPPhp6pYxL3nC2GG1uQQ&sig2=PBcQ-P4E2ckyY2akuxkJZw
- 20 http://www.google.co.jp/url?sa=t&rct=j&q=html5 canvas 高速化&source=web&cd=17&ved=0CFMQFjAGOAo&url=http://d.hatena.ne.jp/kasei_san/20110515/p1&ei=hjHrTqXmKMvQmAXj1JjwCQ&usg=AFQjCNEBdz0x3qsPPhp6pYxL3nC2GG1uQQ
- 16 http://www.google.co.jp/url?sa=t&rct=j&q=javascript canvas コピー&source=web&cd=2&ved=0CCYQFjAB&url=http://d.hatena.ne.jp/kasei_san/20110515/p1&ei=enKnTsO7H6-HmQWMrpG_Dw&usg=AFQjCNEBdz0x3qsPPhp6pYxL3nC2GG1uQQ&sig2=IHoJ
- 14 http://www.google.co.jp/url?sa=t&rct=j&q=canvas 描画速度&source=web&cd=3&ved=0CDcQFjAC&url=http://d.hatena.ne.jp/kasei_san/20110515/p1&ei=Kg_CTtSMJ_GhiAfyvvjlDQ&usg=AFQjCNEBdz0x3qsPPhp6pYxL3nC2GG1uQQ&sig2=yRix3RGD
- 12 https://www.google.co.jp/
- 11 http://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&ved=0CDsQFjAC&url=http://d.hatena.ne.jp/kasei_san/20110515/p1&ei=nP1qT7m3GeL2mAXW1dnCBg&usg=AFQjCNEBdz0x3qsPPhp6pYxL3nC2GG1uQQ&sig2=bu4XMWcdc57c21M01NdlwA
- 10 http://www.google.co.jp/url?sa=t&source=web&cd=1&ved=0CBkQFjAA&url=http://d.hatena.ne.jp/kasei_san/20110515/p1&rct=j&q=canvas putimage&ei=ehbWTarAJoGKvQOFvZWtBw&usg=AFQjCNEBdz0x3qsPPhp6pYxL3nC2GG1uQQ
- 9 http://www.google.co.jp/search?sourceid=chrome&ie=UTF-8&q=canvas+putimage



