私は、漫画のチャウダー(リンクの例)で見られるのと同様の効果を達成しようとしています。ここでは、形状が、静止したままのテクスチャの下のマスキングレイヤーとして機能します。キャンバスをクリアして状態を保存し、長方形のクリッピング領域を描画してから、キャンバスの幅と高さ全体を占める背景テクスチャを描画するレンダリングループを作成することで、このアイデアを試し始めました。
描画関数は次のとおりです。
function draw()
{
context.clearRect(0,0, 640, 480);
context.save();
x += velocityX;
y += velocityY;
context.rect(x, y, 40, 40);
context.clip();
context.drawImage(image, 0,0, 640, 480);
context.restore();
}
基本的には、毎秒60フレームで実行され、長方形の位置を更新し、クリッピング領域内の背景画像をクリッピングします。(コードが完全に構造化されていないことは知っていますが、この効果がキャンバスでも可能かどうかを確認するために実験を行っていました)。
私が抱えていると思われる問題は、ループの前の反復からのクリッピング領域がぶら下がって、上のフィドルに見られる奇妙な効果を作成していることです。draw()
ループのステップですべてを並べ替えようとしましたが、機能しているように見えるのはcanvas.width = canvas.width
、画面をクリアするためのトリックだけです。IEでは機能しないようで、キャンバスも破壊されるため、この画面をクリアする方法は避けたいと思いますstate
。clearRect()
画面をクリアするために動作するはずです。私は何が間違っているのですか?