通過對所有對象實例同時進行幀更新來模擬一系列相互獨立的游戲對象。
(摘自《游戲編程模式》)
游戲狀態更新最好由游戲循環進行調用,而非重新編寫while()循環代碼,但當我們使用Unity開發游戲的時候,我們有接觸到游戲循環的代碼嗎?我們如何將需要實時調用的代碼添加到游戲循環中?相比Unity開發者都很熟悉,每個腳本中都可以添加以下函數:
private void Update()
{
//每幀調用的代碼...
}
這就是更新模式的運用。引擎只負責將所有的Update()方法放在游戲循環中調用,而不用理會Update()中具體實現了什么內容。游戲引循環維護一個動態對象集合,這一個集合可以添加和刪除游戲對象,每一幀,游戲循環負責遍歷並調用游戲對象的Update()。
更新模式
模式情景
- 游戲中包含一系列對象或系統需要同步地運轉
- 各個對象之間幾乎是獨立的
- 對象的行為與時間有關
實例代碼
//游戲對象
public class GameObject
{
public:
GameObject();
virtual ~GameObject(){}
virtual void Update()=0;
}
//場景(游戲對象管理器)
class Scene
{
public:
Scene(int num) : objNum(num){}
void GameLoop();
private:
static const int MAX_ENTITIES=100000;
GameObject* objs[MAX_ENTITIES];
int objNum;
}
void Scene::GameLoop()
{
while(true)
{
for(int index=0;index<objNum;index++)
objs[index]->Update();
}
}