私は何ヶ月もの間、インスピレーションと問題解決の源として stackoverflow.com を使用してきました。これまでのところ、解決策のない問題に遭遇したことは一度もありません。そのため、ここでまず自己紹介し、関心のあるすべての人に問題を共有したいと思います。
ここ数週間、手書きなどの興味深い効果を作成するために、canvas 要素で特定の図形や線をアニメーション化してみました。
これを実現するために、canvas 要素の .clip() コマンドを利用するテクニックを使用して、事前にレンダリングされた画像 (フォーム、ラインなど) が「待機」する領域を非表示にして徐々に表示します。ここで遭遇する問題は、canvas 要素のクリッピング領域を決定する変数に関係しています。アニメーションの値を増やす (減らすのではなく) と奇妙な問題があるようです。
そして、これはすべて非常に奇妙に聞こえるので、私は知っていますが、ここに私が話しているコードの関連部分があります。
$(document).ready(function() {
var ctx = $( "#canvas" )[0].getContext("2d");
ctx.fillStyle = "#a00";
var recW = 200;
function animate() {
ctx.clearRect(0,0,400,400);
ctx.beginPath();
ctx.rect(50,50,recW,100);
ctx.clip();
ctx.beginPath();
ctx.arc(250,100,90,0,Math.PI*2,true);
ctx.fill();
recW--;
if (recW == 150) clearInterval(run);
}
var run = setInterval(function() { animate(); },60);
});
上記のコードは完全に正常に動作します。400*400 のキャンバスに四角形を描画し、それをクリッピング領域として使用し、その後円を描画し、それに応じてこの円をクリッピングします。アニメーション Interval によって、クリッピング四角形の長さがテスト値の 150 に減少します。しかし、ここで私を何時間も悩ませ続けてきた部分があります:
$(document).ready(function() {
var ctx = $( "#canvas" )[0].getContext("2d");
ctx.fillStyle = "#a00";
var recW = 150;
function animate() {
ctx.clearRect(0,0,400,400);
ctx.beginPath();
ctx.rect(50,50,recW,100);
ctx.clip();
ctx.beginPath();
ctx.arc(250,100,90,0,Math.PI*2,true);
ctx.fill();
recW++;
if (recW == 200) clearInterval(run);
}
var run = setInterval(function() { animate(); },60);
});
アニメーション全体を反転させ、クリッピング四角形の幅を 150 から始めて、recW++ でテスト値の 200 まで増やすと、突然アニメーションが機能しなくなります。変数の漸進的な増加は問題なく機能しますが、目に見えるクリッピング領域は拡大しません。
おそらくここで明らかなことを見落としているだけだと思いますが、エラーを見つけることができないようです。誰かが私を正しい方向に向けることができれば、非常に感謝しています;)
ありがとう
トリコン