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

概要

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

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

カメラ

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

主なメソッド

なし

主なプロパティ

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

主なイベント

なし

使用方法

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


  #include <ace.h>
  
  // CameraObject2Dのサンプル。マウスポインタの先を拡大表示しています。
  int main()
  {
      // AC-Engineを初期化する。
      ace::Engine::Initialize(ace::ToAString("CameraObject2D").c_str(), 640, 480, ace::EngineOption());
  
      // シーンを生成する。
      auto scene = std::make_shared<ace::Scene>();
  
      // レイヤーを生成する。
      auto layer = std::make_shared<ace::Layer2D>();
  
      // シーンにレイヤーを追加する。
      scene->AddLayer(layer);
  
      // シーンを切り替える。
      ace::Engine::ChangeScene(scene);
  
      // 画面にテクスチャを表示するオブジェクトを生成する。
      {
          auto tex0 = ace::Engine::GetGraphics()->CreateTexture2D(ace::ToAString("Data/Texture/Sample1.png").c_str());
          auto obj0 = std::make_shared<ace::TextureObject2D>();
          layer->AddObject(obj0);
      }
  
      // 画面にテクスチャを表示するオブジェクトを生成する。
      {
          auto baseCameraObj = std::make_shared<ace::CameraObject2D>();
          baseCameraObj->SetSrc(ace::RectI(0, 0, 640, 480));
          baseCameraObj->SetDst(ace::RectI(0, 0, 640, 480));
          layer->AddObject(baseCameraObj);
      }
  
      // マウスポインタの周辺を拡大表示するカメラを生成する。
      auto cameraObj = std::make_shared<ace::CameraObject2D>();
      layer->AddObject(cameraObj);
  
      // AC-Engineのウインドウが閉じられていないか確認する。
      while (ace::Engine::DoEvents())
      {
          // マウスポインタの位置を取得する。
          auto pos = ace::Engine::GetMouse()->GetPosition();
  
          // 拡大用カメラの描画元を指定する。
          cameraObj->SetSrc(ace::RectI(pos.X - 25, pos.Y - 25, 50, 50));
  
          // ポインタを中心に100x100の拡大画像を表示する。
          cameraObj->SetDst(ace::RectI(pos.X - 50, pos.Y - 50, 100, 100));
  
          // AC-Engineを更新する。
          ace::Engine::Update();
      }
  
      // AC-Engineの終了処理をする。
      ace::Engine::Terminate();
  
      return 0;
  }