キャンバスの状態を保存するsave()関数と、
保存した状態を復元するrestore()関数の使い方をやっていきます。
以下の順序でやります。
1.塗りつぶしの色と、座標系を保存して、
2.塗りつぶしの色と、座標系を移動して、
3.塗りつぶしの色と、座標系を元に戻す
このような流れでJavaScriptを記述しました。一番最後にCodePenを表示しますので、そこで確認できます。
(1)塗りつぶしの色と、座標系を保存
ctx = canvas.getContext("2d"); ctx.fillStyle = "#00ffff"; ctx.beginPath(); ctx.arc(0, 0, 30, 0, 2*Math.PI); ctx.closePath(); ctx.fill(); ctx.save();
まずfillStyle = “#00ffff”;で、シアン色の塗りつぶし色を設定しています。
座標系は何もしないデフォルト状態なので左上隅の座標が(0,0)となっています。
この状態で、円を1つ描画します。・・・①
1つ目は(0,0)を中心とした半径30の円(左上隅が0,0なので見切れてしまう)
このタイミングで、ctx.save()を使って描画状態を保存します。
(2)塗りつぶしの色と、座標系を移動
ctx.fillStyle = "#ff99cc"; ctx.translate(200, 50); ctx.beginPath(); ctx.arc(0, 0, 40, 0, 2*Math.PI); ctx.closePath(); ctx.fill();
次に、fillStyle = “#ff99cc”;で、塗りつぶしをピンク色に設定します。
また、translate(200,50)で、座標軸を右へ200下へ50移動させました。
ここで(0,0)を中心とした半径40のピンクの円を描画します。・・・②
(3)塗りつぶしの色と、座標系を元に戻す
ctx.restore(); ctx.beginPath(); ctx.arc(200, 50, 30, 0, 2*Math.PI); ctx.closePath(); ctx.fill();
ctx.restore();を使って描画状態を復元します
これにより塗りつぶしの色がシアン色になって、座標軸が元に戻った(左上が0,0)はずです。
ここで(200,50)を中心とした半径30の少し小さめの円を描画しました・・・③
すると、色も座標も元に戻ったのがわかります。
See the Pen
canvas-save-restore by pghappy (@pghappy)
on CodePen.