表示するサンプルコードの言語を指定できます。
基本設計
構成
Altseedにより製作されるゲームは主にシーン、レイヤー、オブジェクトの3つの要素で構成されています。
シーンはロゴ画面、タイトル画面、ゲーム画面、ゲームオーバー画面といったゲームの画面を示します。シーン自体には画像を描画する機能はなく、実際に画像を表示するためにはシーンにレイヤーを登録する必要があります。レイヤーを複数保持しレイヤーを管理する機能を持っています。
レイヤーはパラメーター等を表示しているUI、キャラクターが居るフィールドといったゲームの画面内の大まかな描画先を示します。レイヤー自体にも画像を表示する機能はなく、実際に画像を描画するためにはレイヤーにオブジェクトを登録する必要があります。オブジェクトを複数保持しオブジェクトを管理する機能を持っています。
オブジェクトはプレイヤーキャラクター、障害物、弾といったゲーム内の要素を示します。レイヤー内に存在するオブジェクトが実際に画像を表示します。沢山の種類があり、単純に画像を表示するものから文字やエフェクトを表示するオブジェクトもあります。
図で示すと以下のようになります。
この図では、ゲーム画面を示すシーンの中にパラメーターを表示しているUIとキャラクターが居るフィールドを示すレイヤーが存在します。 パラメーターを表示しているUIの中にライフゲージといったオブジェクト、フィールドにキャラクターや障害物といったオブジェクトが存在します。 このような構成が基本であり、例えば、3Dゲームを製作する場合(※)はフィールドをレイヤー2Dからレイヤー3Dに差し替えることで実現でき、ポーズ中の メニューを出したい場合はポーズ中のメニューを示すレイヤーとオブジェクトを追加することで実現できます。オブジェクトも画像を表示するオブジェクトや文字を表示するオブジェクト等が存在します。
さらにシーン、レイヤー、オブジェクトを継承(もしくはそれに準ずる機能)したクラスを作ることで、様々なイベントに反応するオブジェクトなどを作ることができます。例えば、毎フレーム実行されるイベント、消滅した時に実行されるイベントなどです。これらのイベントによりゲームの挙動を構築していきます。
ただ、これだけの要素だけでは綺麗な描画は実現できません。実際には上記にあげた3つの要素以外にテクスチャやサウンドといったリソースが存在します。例えば画像を表示するオブジェクトならテクスチャを読み込み設定することで画像を描画できます。文字を表示するオブジェクトならフォントと文字列を設定することで文字を描画できます。
一般的なゲームだとシーン間の遷移の際に画面がフェードイン・フェードアウトすることが多いですが、Altseedではこの表現をトランジションという機能を使用することで容易に実現できます。
コンポーネントについて
Altseedの要素のうち、シーン、レイヤー、オブジェクトにはコンポーネントという要素を追加できます。コンポーネントは追加した先の オブジェクトに更新処理を追加します。コンポーネントのクラスを継承しUpdateの内容を記述することで更新内容を設定できます。 追加する場合はAddComponent、削除する場合はRemoveComponentを実行します。使用する場面は、例えば、オブジェクトに対して敵の能力で一時的に毒の処理が追加された場合、 オブジェクトに毒の効果を発生させるコンポーネントを追加します。そうすると、毎フレーム、コンポーネントに実装した更新内容がオブジェクトに対して適用されます。 こうすることで柔軟に更新内容が変化する機能を実装できます。
時間指定について
Altseedは実時間を指定する場合、1秒を1とした値で指定します。例えば、1秒は1.0、0.5秒は0.5になります。
フレームレートについて
Altseedは固定フレームレート、可変フレームレート両方に対応しております。初期値では固定フレームレート60FPSが設定されています。固定フレームレート、可変フレームレートの両方の場合でも、1秒間の画面更新回数は「Engine.TargetFPS」で指定されている値に近づくように調整されます。OnUpdateといった毎フレーム実行されるイベントも画面更新回数と同じ回数だけ1秒間に実行されます。
画面更新回数に比例して実行されるイベントとは別に、Altseedではトランジションやエフェクトといった現実の時間に沿って動作する機能もあります。これらの機能は固定フレームレートの場合、処理落ちによりフレームレートが低下しない場合に正しい速度で再生されるよう実行されます。例えば「Engine.TargetFPS」に60FPSを指定したとしても30FPSしか実行速度が出ていない場合、これらの機能の実行速度も1/2に低下してしまいます。一方、可変フレームレートの場合は処理落ちしたとしても現実の時間に沿って実行されます。
何らかの理由でゲームを早送りしたいことがあります。この時、単純にフレームレートを上げるだけではエフェクト、トランジション等は高速化してくれません。この場合、「Engine.TimeSpan」を設定します。デフォルトでは1が設定されていますが、例えば2を設定すると上記の機能は2倍速で動作します。逆に0.5を設定すると0.5倍速で実行されます。この機能は、固定フレームレート、可変フレームレートどちらに対しても使用できます。
何らかの理由で厳密に進行速度を管理したい場合は、「Engine.DeltaTime」に1/60秒を1とした値で設定します。
ForceToRelease関数について
C++以外のプログラミング言語には全てのクラスにForceToRelease関数が存在します。 この関数を実行すると、強制的に使用しているメモリを開放されます。 基本的に使用することはありませんが、何らかの理由でメモリが不足してしまった場合に使用します。 メモリを開放した後の挙動は保証しておりませんので、他に参照が残っていないことを確認してから実行してください。
※ 現在のバージョンではLayer3Dは開発中です。