オブジェクト2D (Object2D)

概要

ゲーム上で動作する2Dの描画オブジェクトを定義します。

このクラスを継承して独自のパラメータを追加したり、イベントに独自のイベントを設定したりすることで、独自の描画オブジェクトクラスを作成出来ます。主にゲーム上で表示するプレイヤー、敵キャラならびにステージ上で動くオブジェクトを定義するのに使用します。

オブジェクト2Dクラスを継承して各々の用途に特化したクラスも用意されております。(リファレンストップの2D項目参照)

このオブジェクトをゲーム上で動かすには、シーンに登録されたレイヤーに登録する必要があります。

変形

オブジェクトは位置、回転、拡大といった変形に関する情報を持っています。これらの値を変更することで、描画される画像等が変形します。例えば、キャラクターが移動したら位置の値を変更し、キャラクターが巨大化したら拡大の値を変更することで容易にキャラクターの見た目の変形を表現できます。

親子関係

オブジェクトは親子関係を持つことをできます。子になったオブジェクトは親オブジェクトの変形の影響を受けます。例えば親オブジェクトが移動したら同じように子オブジェクトも移動します。親オブジェクトが回転したら、子オブジェクトも親オブジェクトを中心に回転します。親子関係を使用すると、例えばキャラクターの周りを動くサポートメカ等を容易に表現できます。

追加描画

オブジェクト2Dの通常の描画機能では実現しにくい描画のために、オブジェクト2Dには直接画像を描画する機能を持っています。DrawSpriteAdditionallyという関数で描画はできますが、この描画はOnDrawSpriteAdditionallyというイベント内部でのみ
有効です。それ以外の場所で実行した場合の挙動は未定義です。

主なメソッド

システム系

名称 説明
Vanish このオブジェクトを破棄します。
AddChild 指定した2Dオブジェクトをこのオブジェクトの子オブジェクトとしてこのインスタンスに追加します。
RemoveChild 指定した子オブジェクトをこのインスタンスから削除します。

主なプロパティ

システム系

名称 説明
IsUpdated このオブジェクトが更新されるか否か。
IsDrawn このオブジェクトが描画されるか否か。
IsAlive このオブジェクトが破棄されておらず、レイヤーに登録されていれば更新等のイベントが実行されるか。
Layer このオブジェクトが登録されているレイヤー。

変形系

名称 説明
Position このオブジェクトの親に対する相対的な位置
GlobalPosition このオブジェクトの親の変形の影響を考慮した絶対的な位置
Angle このオブジェクトの親に対する相対的な回転角度
Scale このオブジェクトの親に対する相対的な拡大率

主なイベント

名称 説明
OnStart オブジェクトがレイヤーに登録された時、ようはレイヤー2DのAddObjectを実行した時に発生する初期化イベント
OnUpdate 毎フレーム実行される更新イベント
OnDrawAdditionally 追加描画を実行する必要がある時に発生するイベント

使用方法

ほぼ全てのサンプルで使用されています。
ここではTextureObject2Dクラスのサンプルを例として提示します。


  #include <ace.h>
  
  // TextureObject2Dのサンプル。TextureObject2Dを用いて画像を表示しています。
  int main()
  {
      // AC-Engineを初期化する。
      ace::Engine::Initialize(ace::ToAString("TextureObject2D").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 tex = ace::Engine::GetGraphics()->CreateTexture2D(ace::ToAString("Data/Texture/Sample1.png").c_str());
  
      // TextureObject2Dのインスタンスを生成する
      auto obj = std::make_shared<ace::TextureObject2D>();
  
      // 描画に使うテクスチャを設定する
      obj->SetTexture(tex);
  
      // 描画位置を指定する
      obj->SetPosition(ace::Vector2DF(100, 100));
  
      // レイヤーへ追加する
      layer->AddObject(obj);
  
      // AC-Engineのウインドウが閉じられていないか確認する。
      while (ace::Engine::DoEvents())
      {
          // AC-Engineを更新する。
          ace::Engine::Update();
      }
  
      // AC-Engineの終了処理をする。
      ace::Engine::Terminate();
  
      return 0;
  }