方法を検討することをお勧めしcontext.createPattern
ます。新しいキャンバスを動的に作成し、その上に複雑な画像を描画できます。一度描画を終えたら、呼び出しcontext.createPattern(dynamicCanvas, 'no-repeat')
て、そのパターンへの参照を保持できます。次に、そのヘビを描きたいときはいつでも、コンテキストを適切な場所に変換し、 をパターンに設定しcontext.fillStyle
て、パターンに合う長方形を塗りつぶします。一般化されたコードを次に示します。
// Only do this once per unique snake, not per frame
var patternCanvas = document.createElement("canvas");
// Set the size to be the minimum size to draw your snake on
patternCanvas.width = 100;
patternCanvas.height = 100;
// code that draws snake onto patternCanvas here
// ...
// Create the pattern
var pattern = patternCanvas.getContext("2d").createPattern(patternCanvas, "no-repeat");
// Using your real canvas that's drawing every frame
var realContext = realCanvas.getContext("2d");
realContext.save();
realContext.translate(50, 80); // x, y coordinates of where you want to draw your snake
realContext.fillStyle = pattern;
realContext.fillRect(0, 0, 100, 100); // The last two parameters are your width and height of your snake pattern
realContext.restore();
createPattern
は canvas オブジェクト全体を取得でき、 を DOM オブジェクトに追加する必要がないpatternCanvas
ため、バックバッファのように機能することに注意してください。
パターンを描画するときは、すべて同じsave
/内に描画するようにしてくださいrestore
。長方形を翻訳して塗りつぶし続けるだけです。save
/restore
および を変更するたびcontext
に速度が低下するため、可能な限り呼び出しをバッチ処理する必要があります。
Canvas の描画が遅くなる理由はいくつか考えられるので、http://www.html5rocks.com/en/tutorials/canvas/performance/に記載されているいくつかのアイデアに従うことをお勧めします。