ゲームの回転

赤い四角は回転できます:


回転コンポーネント

このチュートリアルの前半部分では、赤い四角がゲームエリア上で移動できますが、回転または回転できませんでした。

コンポーネントを回転するには、コンポーネントの描画方法を変更する必要があります。

キャンバス要素が利用できる唯一の回転メソッドは、全体のキャンバスを回転します:

キャンバス上に描画する他のすべての内容も回転され、特定のコンポーネントだけでなく回転されます。

そのため、 update() メソッド内で変更を行います:

まず、現在のキャンバスコンテキストオブジェクトを保存します:

ctx.save();

次に、translate メソッドを使用して、全体のキャンバスを特定のコンポーネントの中心に移動します:

ctx.translate(x, y);

次に、rotate() メソッドを使用して必要な回転を行います:

ctx.rotate(angle);

今や、コンポーネントをキャンバスに描画する準備ができていますが、今度は平移(および回転)されたキャンバス上でその中心位置を 0,0 に描画します:

ctx.fillRect(width / -2, height / -2, width, height);

作業が完了したら、このコンテキストオブジェクトを保存位置に復元するために restore メソッドを使用する必要があります:

ctx.restore();

という名前のコンポーネントが唯一回転します:

コンポーネントコンストラクタ

component コンストラクタには、 angle の新しい属性は、コンポーネントの角度を表すラジアンです。

component コンストラクタの update メソッドはコンポーネントの描画位置であり、ここでコンポーネントが回転可能であることを確認できます:

インスタンス

function component(width, height, color, x, y) {
  this.width = width;
  this.height = height;
  this.angle = 0;
  this.x = x;
  this.y = y;
  this.update = function() {
    ctx = myGameArea.context;
    ctx.save();
    ctx.translate(this.x, this.y);
    ctx.rotate(this.angle);
    ctx.fillStyle = color;
    ctx.fillRect(this.width / -2, this.height / -2, this.width, this.height);
    ctx.restore();
  }
}
function updateGameArea() {
  myGameArea.clear();
  myGamePiece.angle += 1 * Math.PI / 180;
  myGamePiece.update();
}

自分で試してみる