カメラオブジェクト2D (CameraObject2D)

概要

オブジェクト2Dクラスを拡張し、レイヤー2Dの一部の領域のみを画面に描画できるようにする2D描画オブジェクトクラスです。
レイヤー2Dをカメラで撮影して、撮影結果を画面に表示します。例えば、アクションゲームでプレイヤーの動作に合わせて全ての背景や敵キャラクターを動かすのではなく、カメラのみを動かすことにより処理量が少なく、かつわかりやすい実装を実現します。

プロパティにはSrcとDstが存在が存在します。図で示すように、Srcは描画元となる撮影される領域、Dstは描画先となる画面上の領域になります。これらのサイズは任意で拡大縮小、横方向のみに拡大して描画といった変形もできます。

カメラ

また、Srcの位置はカメラオブジェクトの位置・回転・拡大の値によって変化します。例えばカメラオブジェクトが右に移動した場合、Srcの位置も右に移動します。キャラクターの位置にあわせてカメラオブジェクトを移動しキャラクターを常に画面の中心に表示するといった使い方に使用できます。

主なメソッド

なし

主なプロパティ

名称 説明
Src 描画元
Dst 描画先

主なイベント

なし

使用方法

CameraObject2Dクラスのサンプルです。


  /// <summary>
  /// CameraObject2Dのサンプル。マウスポインタの先を拡大表示しています。
  /// </summary>
  public class CameraObject2D
  {
      [System.STAThread]
      static void Main(string[] args)
      {
          // AC-Engineを初期化する。
          ace.Engine.Initialize("CameraObject2D", 640, 480, new ace.EngineOption());
  
          // シーンを生成する。
          var scene = new ace.Scene();
  
          // レイヤーを生成する。
          var layer = new ace.Layer2D();
  
          // シーンにレイヤーを追加する。
          scene.AddLayer(layer);
  
          // シーンを切り替える。
          ace.Engine.ChangeScene(scene);
  
          // 画面にテクスチャを表示するオブジェクトを生成する。
          {
              var tex0 = ace.Engine.Graphics.CreateTexture2D("Data/Texture/Sample1.png");
              var obj0 = new ace.TextureObject2D();
              obj0.Texture = tex0;
              layer.AddObject(obj0);
          }
  
          // 画面全体を表示するカメラを生成する。
          {
              var baseCameraObj = new ace.CameraObject2D();
              baseCameraObj.Src = new ace.RectI(0, 0, 640, 480);
              baseCameraObj.Dst = new ace.RectI(0, 0, 640, 480);
              layer.AddObject(baseCameraObj);
          }
  
          // マウスポインタの周辺を拡大表示するカメラを生成する。
          var cameraObj = new ace.CameraObject2D();
          layer.AddObject(cameraObj);
  
          // AC-Engineのウインドウが閉じられていないか確認する。
          while (ace.Engine.DoEvents())
          {
              // マウスポインタの位置を取得する。
              var pos = ace.Engine.Mouse.Position;
  
              // 拡大用カメラの描画元を指定する。
              cameraObj.Src = new ace.RectI((int)(pos.X) - 25, (int)(pos.Y) - 25, 50, 50);
  
              // ポインタを中心に100x100の拡大画像を表示する。
              cameraObj.Dst = new ace.RectI((int)(pos.X) - 50, (int)(pos.Y) - 50, 100, 100);
  
              // AC-Engineを更新する。
              ace.Engine.Update();
          }
  
          // AC-Engineの終了処理をする。
          ace.Engine.Terminate();
      }
  }