私はC言語で2度の戦闘ゲームを開発しています(学習目的のため)、ゲームロジックを適切に実装する方法を考え出すのは難しいです。私の現在のアーキテクチャの概要を知るために、私はデータ保持者として機能するコンポーネントクラスを持っています。これらのコンポーネントに作用するように設計された関数だけの「システム」を持っています。私は、ゲームに現在ある戦闘機の配列を保持しているシーンのクラスを持っており、このシーンは、戦闘機の状態を更新し、その後、自由に戦闘機の部品に作用することができ、個々のサブシステムに渡されます。それぞれの内部で、現在の2Dゲームアーキテクチャにゲームロジックレイヤーを実装する方法
//Add a fighter object to array of fighters and set starting position
scene.CreatePlayerFighter(160.0f, 0.0f);
scene.CreateAIFighter(80.0f, 45.0f);
gameWolrd.Init(scene);
Renderer.Init(scene, window);
AI.Init(scene);
//etc...
//Game loop
while (true)
{
Input.Update(scene);
Physics.Update(scene);
AI.Update(scene);
//etc....
window.ClearBuffers();
Renderer.Update(scene, colorShaderProgram);
window.SwapBuffers();
}
アゲインサブシステム(レンダラ、AI、入力、など)すべての戦闘機コンポーネントがシステムの機能に渡され、その後、バック戦闘機に挿入され、新しい値を用いてバック吐き出すされている:
void Physics::Update(Scene& scene)
{
for (Fighter& fighter : scene.fighters)
{
//Update fighter position based on fighter's current velocity which has been set by input
TransformComponent newFighterPosition = System::MoveFighter(fighter.GetComponent<TransformComponent>(), fighter.GetComponent<VelocityComponent>());
//Insert new TransformComponent to update fighter's position
fighter.Insert<TransformComponent>(newFighterPosition);
}
}
この現在のアーキテクチャは利点を有します私は戦闘機のクラスやそれを支配することなくシステムを非常に簡単に追加したり取り外したりすることができるという点で、直接。私のシーンが各サブシステムに1つずつ渡されて戦闘機を更新するので、問題はすべてが絶望的に連続していることです。私はゲームロジックレイヤーを実装する私の考えの1つが、より高いレベルのクラスを持っていただけでゲームロジックレイヤレベルのユーザーにより多くのコントロールを与えるために追加のパラメーターを追加することができるphysics.MoveFighter(TransformComponent, VelocityComponent, float amountToMove);
のような特定のゲームエンジンシステム関数を直接呼び出したので、もちろん、このようにすることで、ゲームロジックのユーザーがどのような順序でシステム関数を呼び出すか呼び出すことができます。このようにゲームロジックレイヤーを実装し、すべての呼び出しをキューに入れて、ゲームエンジン内で正しく動作するように並べ替える方法はありますか?それとも、私の現在のアーキテクチャ内でゲームロジックを実装しようとするより良い方法がありますか?
あなたができることの1つは、新しいシステムを構築してRWのすべてのコンポーネントにアクセスし、ファイターが持っていることです。 –