這一次給出一些補充的架構圖:
這個圖的左邊一個工作流程是整個遊戲的主迴圈。對這個流程我有一點需要解釋,就是那個真備離開遊戲迴圈。這個迴圈是為瞭解決一些不能夠立即退出的問題,例如已經正在計算一些動作,結果還沒有告知對方等等。
右邊的工作流程是正常遊戲工作流程的詳細圖例。在每一次的正常遊戲迴圈裡面,每一次都會經曆幾個大的步驟,圖中的三個步驟就是一個簡單的配置方案。當然,也許還應該有一些其他的步驟,但是這裡為了討論的簡便,僅僅畫出了這麼一個情況。
首先進行的是角色思考。這個步驟是為了讓遊戲當中的每一個角色能夠起來思考一些問題,比如說一個坦克需要看一下當前周圍有沒有什麼敵人,如果有那麼需要怎麼處理。在這個步驟裡面,顯然需要從角色對象池裡面提取每一個角色,讓每一個角色都進行思考。在角色思考的時候,就可能產生一些指令,例如向某個敵人發起攻擊,或者移動到什麼位置上去。這些指令(在這裡我們稱之為“動作”)不會立即得到執行的,而是放到動作執行隊列裡面去,等到下一個階段——“動作執行”這個階段才會執行。
當所有的角色都已經思考過一遍之後,就進入下一個階段——動作執行了。在這個階段裡面,動作調度器會進行一定的調度,儘可能按順序執行每一個動作。當所有動作都執行完畢之後,將會向下一個階段移動。
但是實際上動作的調度並不是如此簡單的一件事情,因為我們需要考慮一些比較複雜的情況。比如說:假設我們希望讓控制的坦克群移動到某個座標之後再移動到另外一個座標,也就是說某個動作可能必須在另外一個動作完成之後才能夠開始進行。此外,也可能某個動作所依賴的對方最新資料並沒有到達,因此不能夠進行計算。所以這個動作隊列實際上應該劃分為等待隊列和就緒隊列,等待隊列的動作獲得了所有可以執行動作計算的條件之後,就會被調度器自動移動到就緒隊列。在動作執行階段裡面實際上只執行就緒隊列裡面的動作。讓我們看看另外一個圖,也許能夠加深您的認識:
如果說這樣的圖形對於詳細的動態執行情況的說明還不是很清晰的話,下面我給出另外一個順序圖表。這個順序圖表是包含了“角色思考”和“動作執行”兩個階段的動態調用情況:
有任何疑問請留言。