オブジェクト2Dクラスを拡張し、チップを複数持った上でそれらを全て一括で高速に描画できる2D描画オブジェクトです。
同じくテクスチャを描画するテクスチャオブジェクト2Dの場合は、描画するテクスチャの数だけそのインスタンスを生成する必要があります。しかし、テクスチャオブジェクト2DはOnUpdateメソッドを呼び出す分、その数が増えるとゲームに対して甚だしい負荷がかかります。そこで、このマップオブジェクト2Dはテクスチャと描画の情報をまとめたチップを複数持つことで、OnUpdateメソッドを一度しか呼び出さずに複数のテクスチャを描画することができ、ゲームに掛かる負荷を減らすことが出来ます。図に示すように大量の画像も高速に描画できます。
描画対象とするチップはAddChipにて追加、RemoveChipにて削除することが出来ます。
アクションゲームにおいて、マップチップや背景オブジェクトなどのゲーム中にてほぼ更新する必要はないが大量に描画する必要があるテクスチャを扱うのにこのマップオブジェクト2Dは適しています。逆にプレイヤーや敵キャラクターなど毎フレーム更新するオブジェクトを扱うには、テクスチャオブジェクト2Dが適しています。
チップの作成や設定については、チップの項を御覧ください。
名称 | 説明 |
---|---|
AddChip | チップを描画対象として追加する (追加成功か否かが返り値) |
RemoveChip | チップを描画対象から削除する(削除成功か否かが返り値) |
名称 | 説明 |
---|---|
CenterPosition | 描画の際に適用する変換(拡大、回転、移動)の基準位置。(親から見た相対座標にて設定) |
DrawingPriority | 描画の優先順位 |
なし
MapObject2Dクラスのサンプルです。
/// <summary>
/// MapObject2Dのサンプル。敷き詰められたタイルをカメラで撮影して画面に表示しています。
/// </summary>
class MapObject2D
{
[System.STAThread]
static void Main(string[] args)
{
// AC-Engineを初期化する。
ace.Engine.Initialize("MapObject2D", 640, 480, new ace.EngineOption());
// シーンを生成する
var scene = new ace.Scene();
// レイヤーを生成する
var layer = new ace.Layer2D();
// シーンにレイヤーを追加する
scene.AddLayer(layer);
// シーンを切り替える
ace.Engine.ChangeScene(scene);
// カメラを設定する。
var camera = new ace.CameraObject2D();
camera.Src = new ace.RectI(0, 0, 640, 480);
camera.Dst = new ace.RectI(0, 0, 640, 480);
{
// マップオブジェクトを生成する。
var mapObject = new ace.MapObject2D();
var texture = ace.Engine.Graphics.CreateTexture2D("Data/Texture/Sample2.png");
// マップオブジェクトに50*50=2500個のチップを登録する。
for (int i = 0; i < 50; ++i)
{
for (int j = 0; j < 50; ++j)
{
// チップを生成する。
var chip = new ace.Chip2D();
// チップにテクスチャを設定する。
chip.Texture = texture;
// チップの描画先を指定する。
chip.Position = new ace.Vector2DF(i * 40 - 1000, j * 40 - 1000);
// マップオブジェクトにチップを追加する。
mapObject.AddChip(chip);
}
}
// レイヤーにマップオブジェクトを追加する。
layer.AddObject(mapObject);
// レイヤーにカメラオブジェクトを追加する。
layer.AddObject(camera);
}
// AC-Engineのウインドウが閉じられていないか確認する。
while (ace.Engine.DoEvents())
{
// カメラを移動させる
var pos = camera.Src;
pos.X += 1;
pos.Y += 1;
pos.X %= 1000;
pos.Y %= 1000;
camera.Src = pos;
// AC-Engineを更新する。
ace.Engine.Update();
}
// AC-Engineの終了処理をする。
ace.Engine.Terminate();
}
}