我有一個組織遊戲循環的想法。我對性能有些懷疑。可能有更好的做事方式。如果你有一組遊戲組件,他們都被要求在每個遊戲循環迭代中做一些事情。例如:遊戲循環性能和組件方法
GameData data; // shared
app.registerComponent("AI", ComponentAI(data));
app.registerComponent("Logic", ComponentGameLogic(data));
app.registerComponent("2d", Component2d(data));
app.registerComponent("Menu", ComponentMenu(data))->setActive(false);
//...
while (ok)
{
//...
app.runAllComponents();
//...
}
優點:
- 良好基於組件的應用,沒有依賴關係,良好的模塊化
- 我們可以激活/去激活,註冊/註銷部件動態
- 一些組件可以是透明地移除或替換,並且系統仍然可以工作,因爲什麼也沒有發生(改變2d到3d)(團隊合作:每個程序員創建他/她自己的組件,並且不需要其他組件編譯代碼) 個
疑惑:
- 在遊戲圈與虛擬調用組件:: run()的
- 我想組件:: run()的返回bool值,並檢查該值內環。如果返回false,則必須禁用組件。所以內部循環變得更加昂貴。
那麼,這個解決方案有多好?你在真實項目中使用過它嗎?
您的優先級是正確的。但實際上,虛擬通話非常緩慢。當我編寫粒子系統時,每個粒子的虛擬調用比每個粒子系統的調用太慢。 – 2010-04-21 11:21:59
對,重要的可能是您的程序每秒需要調用多少個虛函數。 100000?沒問題。但是,1000萬可能是CPU總時間中的一小部分。 另一個問題是每個函數調用完成多少工作。只要大多數虛擬通話都做了不重要的工作,就沒有問題了。 – Qwertie 2010-04-23 19:29:05