我正在用C++開發2D戰鬥遊戲(用於學習目的),而且我很難搞清楚如何正確實現遊戲邏輯。爲了快速瀏覽我當前的體系結構,我有作爲數據持有者的組件類,並且我擁有「系統」,這些「系統」只是設計用於處理這些組件的功能。我有保持當前正在遊戲的戰士的陣列的場景類和該場景被傳遞給各個子系統然後可以自由地對戰鬥機部件起作用,更新戰士狀態:將遊戲邏輯層實現爲當前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);
}
}
該電流架構具有的優點因爲我可以非常容易地添加和刪除系統,而不影響戰鬥機類或組件直接跳轉。問題是一切都是絕望的連續,因爲我的場景被逐一傳遞到每個子系統來更新戰士。我提到這個問題是因爲我的一個想法是實現一個遊戲邏輯層,就是讓更高等級的類直接調用特定的遊戲引擎系統函數,如physics.MoveFighter(TransformComponent, VelocityComponent, float amountToMove);
,我可以在其中添加額外的參數,以便讓用戶在遊戲邏輯層級更具控制力。當然,以這種方式做事意味着系統功能將以遊戲邏輯的用戶所看到的任何順序被調用和調用。有沒有辦法以這種方式仍然實現遊戲邏輯層,並可能將所有調用排隊並重新排列它們以在遊戲引擎中正確運行?或者是否有更好的方法來嘗試在當前體系結構中實現遊戲邏輯?
你可以做的一個方法是建立一個新的系統讓RW訪問所有的組件和戰鬥機,然後把它放在幀的結尾打勾? –