Javascript でゲーム エンジンを作成しています。回転可能なカメラ オブジェクトが必要です。カメラが回転すると、2D シーン全体もカメラの位置を中心に回転してレンダリングされます。各ビジュアル エンティティも同様に回転できます。これがその方法です。
context.save(); //As we are about to change the context's state, we need to save it so it can be restored.
context.translate(entity.position.x + entity.width/2, entity.position.y + entity.height/2); //Translate to the center of the entity so the context can be rotated with the desired effect.
context.rotate(entity.rotation); //In radii.
context.drawImage(entitiy.image, -entity.width/2, -entity.height/2);
context.restore(); //Restore the previous context state so it can be used later by other entities.
同様の方法でカメラの回転を実現したいと思います。基本的に、すべてのエンティティを調べてレンダリングする前に、次のようにします。
if (camera.rotation != 0)
{
renderer.context.save();
renderer.context.rotate(camera.rotation);
}
//Loop through entities and render.
そして、エンティティが終了した後 (同じコンテキストを何度も保存して復元した後)、次のように、コンテキストをレンダリング前の状態に復元したいと思います。
if (camera.phi != 0)
{
renderer.context.restore();
}
両方ともある程度回転している 2 つのエンティティと、回転しているカメラがあるとします。プロセスは次のようになります。
- 保存
- 保存
- 平行移動と回転
- 2から復元。
- 保存
- 平行移動と回転
- 5から復活。
- 1から復元します。
このタイプの動作はサポートされていますか? 実装したところ、動作しているようですが、バグもあるので、状況を正しく評価できません...