オブジェクト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();
}
}