キャンバス要素の描画内容をクリアする方法として、`clearRect()`メソッドがよく使用されます。この記事では、`clearRect()`メソッドの基本的な使い方から実践的な例まで、わかりやすく解説します。

clearRect()メソッドの基本

`clearRect()`は、Canvas 2D APIが提供するメソッドで、指定した矩形領域内のピクセルを透明に設定します。基本的な構文は以下の通りです:

context.clearRect(x, y, width, height);
  • x: クリアする領域の左上のX座標
  • y: クリアする領域の左上のY座標
  • width: クリアする領域の幅
  • height: クリアする領域の高さ

キャンバス全体をクリアする方法

キャンバス全体をクリアするには、キャンバスの幅と高さを指定して`clearRect()`を使用します:

const canvas = document.getElementById('myCanvas');
const ctx = canvas.getContext('2d');

// キャンバス全体をクリア
ctx.clearRect(0, 0, canvas.width, canvas.height);

特定の領域だけをクリアする例

キャンバスの特定の部分だけをクリアしたい場合は、座標と大きさを指定します:

// 100x100ピクセルの領域をクリア
ctx.clearRect(50, 50, 100, 100);

アニメーションでの活用例

アニメーションを作成する際は、フレームごとにキャンバスをクリアする必要があります:

function animate() {
    // キャンバスをクリア
    ctx.clearRect(0, 0, canvas.width, canvas.height);
    
    // 新しい描画を行う
    ctx.fillRect(x, y, 50, 50);
    
    // 次のフレームを要求
    requestAnimationFrame(animate);
}

よくあるエラーと解決策

1. キャンバスが見つからない

// エラー回避のため、存在確認を行う
const canvas = document.getElementById('myCanvas');
if (canvas) {
    const ctx = canvas.getContext('2d');
    ctx.clearRect(0, 0, canvas.width, canvas.height);
}

2. クリア範囲が不適切

// キャンバスのサイズを超えないよう注意
const width = Math.min(requestedWidth, canvas.width);
const height = Math.min(requestedHeight, canvas.height);
ctx.clearRect(0, 0, width, height);

パフォーマンスの最適化

大規模なアプリケーションでは、`clearRect()`の呼び出しを最適化することが重要です:

// 必要な領域のみクリア
function optimizedClear(x, y, width, height) {
    // 実際に描画された領域のみをクリア
    ctx.clearRect(
        Math.floor(x),
        Math.floor(y),
        Math.ceil(width),
        Math.ceil(height)
    );
}

まとめ

`clearRect()`メソッドは、Canvas要素の描画内容をクリアする際の標準的な方法です。適切に使用することで、スムーズなアニメーションや描画の更新が可能になります。エラーを防ぐためには、キャンバスの存在確認やサイズの適切な管理が重要です。

実際の開発では、パフォーマンスを考慮しながら、必要な部分のみをクリアするように実装することをお勧めします。これにより、効率的なCanvas操作が可能になります。