JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

HTML5 Canvasのカメラ/ビューポートを実装・操作する方法を徹底解説

HTML5 Canvasでビューポート(カメラ)を操作する基本

HTML5 Canvasでカメラやビューポート(画面に見える範囲)を実装する場合、drawImage()メソッドを活用するのが最も一般的で効率的な方法です。背景画像の一部を切り取って表示領域に描画することで、広大なマップの中をスクロールしながら移動するような演出を簡単に実現できます。

drawImage()メソッドの構文

9つの引数を持つdrawImage()を使用すると、元画像の任意の矩形領域を切り出し、Canvas上の指定した位置とサイズで描画することが可能です。

ctx.drawImage(image, sx, sy, sWidth, sHeight, dx, dy, dWidth, dHeight);
  • sx, sy: 切り出し元画像の左上座標(カメラ位置に相当)
  • sWidth, sHeight: 切り出す領域の幅と高さ(ビューポートサイズ)
  • dx, dy: Canvas上の描画先座標
  • dWidth, dHeight: 描画時の幅と高さ

実装例:ビューポートの描画

まず、前フレームの描画内容をclearRect()でクリアし、その後に背景画像の必要な部分だけを切り出して描画します。

ctx.clearRect(0, 0, game.width, game.height);

// 背景画像全体ではなく、必要な範囲だけを切り出して描画
ctx.drawImage(background, cropLeft, cropTop, cropWidth, cropHeight,
              0, 0, viewWidth, viewHeight);

ゲームへの応用例

実際のゲーム開発では、getElementById()でCanvas要素を取得し、2Dコンテキストを通じてビューポート処理を行います。以下は背景の一部を表示しつつ、円形のオブジェクトを重ねて描画する例です。

// Canvas要素とコンテキストの取得
var myGame = document.getElementById("game");
var myCtx = myGame.getContext("2d");

// 描画内容のクリア
myCtx.clearRect(0, 0, game.width, game.height);

// drawImage()で背景の一部を切り出して表示
myCtx.drawImage(background, left, top, 350, 250, 0, 0, 250, 150);

// 円形のオブジェクトを描画
myCtx.beginPath();
myCtx.arc(130, 80, 12, 0, Math.PI * 2, false);
myCtx.closePath();
myCtx.fill();
myCtx.stroke();

カメラ移動を実現するポイント

cropLeftcropTopなどの値をゲームループ内で更新することで、カメラがワールド空間を移動しているように見せることができます。たとえば、プレイヤーキャラクターの座標に追従してこれらの値を変化させれば、横スクロール型のアクションゲームなどに必要なカメラ機能が完成します。毎フレームclearRect()で画面をリセットし、drawImage()で再描画するという流れを繰り返すのが基本的なパターンです。

  1. HTML5のdrawImage()メソッドを使ってCanvasに画像を描画する方法

    HTML5の drawImage() メソッドは、キャンバス(canvas)上に画像・別のcanvas・動画などを描画するために使用します。画像の一部だけを切り取って描画することもでき、描画時にサイズを拡大・縮小することも可能です。 drawImage()メソッドのパラメータ一覧 drawImage() メソッドで指定できるパラメータとその説明は以下の通りです。 番号パラメータと説明 1img描画対象となる画像(image)、canvas、または video を指定します。 2sxクリッピング(切り抜き)を開始するx座標。省略可能です。 3syクリッピングを開始するy座標。省略可能です

  2. HTML5のCanvasで画像を描画する方法【drawImage()の使い方を解説】

    HTML5の<canvas>タグは、JavaScriptなどのスクリプトを使ってグラフィックスやアニメーションを描画するための要素です。HTML5で新たに導入されたタグであり、ブラウザ上で動的なビジュアル表現を実現できます。 HTML5キャンバスで画像を扱うには、drawImage()メソッドを使用します。このメソッドは、指定した画像をキャンバス上にそのまま描画します。 drawImage()メソッドの基本構文と引数 drawImage()メソッドの基本的な呼び出し形式は次の通りです。 ctx.drawImage(img, x, y); 各引数の意味は以下の通りです。 img: