アム すなわちのみ移動選手の後ろに描かれた背景にはHTMLキャンバスクリップ領域 - コンテキスト復元?
EDITを再描画する必要が心を動かされない項目(背景画像、静的な項目など)の再描画を防ぐために、私のキャンバス上の「ダーティゾーン」を設定しようとしています:示唆したように、ここでの「更新」の方法がうまくいかないこと http://jsfiddle.net/7kbzj/3/
のjsfiddleですので、moveSprite()を使用すると、基本的には、...「スプライトを移動する」リンクをクリックして実行して得ることができますクリックするたびにクリッピングゾーンが右に10ピクセルずつ移動する必要があります。クリッピングマスクは初期位置に留まり、再ペイントだけが発生します。奇妙なO_O
私は私のキャンバスを初期化として、背景がペイントされた後そう、私はctx.save()メソッドを使用し:クリッピング作品を見るために
function init() {
canvas = document.getElementById('kCanvas');
ctx = canvas.getContext('2d');
ctx.fillStyle = "rgb(0,128,0)";
ctx.fillRect (0,0,320,240);
ctx.save();
setInterval(function() { update(); }, tpf);
}
を、私は別の色を描きます私は結果が悪いです...クリップされ、最初のクリッピング領域は青色の塗装されたかった面積:(
function update() {
setDirtyArea(x,y,w+1,h)
ctx.fillStyle = "rgb(0,0,128)";
ctx.fillRect (0,0,320,240);
x++;
// paint image
ctx.clearRect(x,y,w,h);
ctx.drawImage(imageObj, x, y);
}
function setDirtyArea(x,y,w,h) {
ctx.restore();
// define new dirty zone
ctx.beginPath();
ctx.rect(x, y, w, h);
ctx.clip();
}
のバックグラウンド(青1) 0
私は青いゾーンが画面の右側に伝播するのを好きです...助けてください、私は何が間違っているのか理解していません! ありがとう、 J.
クリッピングを扱う代わりに、複数のキャンバスを使うだけで簡単になるかもしれません(CSS z-index help!)。これにより、クリッピングを避けることができます。ちなみに、jsfiddleや類似のサービスに具体的なデモを設定することができれば、涼しいかもしれません。 –
アドバイスをいただきありがとうございます...実際には、ここにそれのjsfiddleです! http://jsfiddle.net/7kbzj/3/ jsfiddleは間隔を登録できませんので、moveSprite()を呼び出すbtnを追加しました... 彼はマルチキャンバスのため、はい、そうすることができます。しかし、あなたは動かされていないものを再塗装するでしょう。モバイルデバイス上で動作するようになっているので、パフォーマンスが大幅に向上するはずだからクリッピングが必要です。 – Jem
私は他の場所で保存/復元を移動しました。それを今見て、http://jsfiddle.net/7kbzj/4/。あなたはまだ何かを微調整する必要があるかもしれません。私はinitで "保存"が正しく起動されていないと思っています(キャンバスはまだ準備ができていませんか?)。ドキュメントが正しく読み込まれた後で実行するようにしてください(別の可能性のある修正)。 –