跳轉到

每幀執行順序

GridEngine 的每一幀由更新、碰撞、繪製與生命週期套用組成。順序決定同一幀中的狀態何時可見,例如 OnUpdate 修改座標後,本幀碰撞會使用新座標;修改 z-index 後,本幀繪製也會使用新值。

1. GridObject update (spawn order)
2. Overlay update (frame-start overlays)
3. GridObject collision pairs (spawn order)
4. Clear background and draw grid
5. GridObject render (z-index, then spawn order)
6. Overlay draw (frame-start overlays)
7. Apply deferred destroy and spawn

更新

Engine 依原始 spawn 順序呼叫每個有效物件的 OnUpdate(),接著更新本幀開始時已存在的 Overlay。隱藏的物件仍更新;排定刪除的物件會被跳過。前一個物件所做的狀態修改可由後一個物件在同一更新階段讀取。

Overlay 更新位於物件更新之後。callback 中加入的新 Overlay 不在本幀開始時記錄的範圍內,下一幀才更新與繪製。

碰撞

更新全部完成後,Engine 依 spawn 順序檢查每一組有效物件。座標修改會在同一幀生效;隱藏、移到地圖外或 Destroy 也會立即改變後續配對的資格。完整配對規則見同格碰撞

碰撞不依賴 z-index。畫在最上方的物件沒有較高碰撞優先權,遊戲規則若需要優先順序,應在 callback 或遊戲狀態中明確表達。

繪製

Engine 清除背景並選擇性繪製格線,再複製目前物件指標,使用 stable sort 依 z-index 由小到大排列。相同 z-index 維持 spawn 順序。排序只作用於這份繪製用副本,不會改變下一幀更新或碰撞順序。

所有可見 GridObject 繪製完成後,Engine 依加入順序呼叫 Overlay 的 Draw()。Overlay 沒有 z-index,後加入者會畫在較早加入者上方。

幀末變更

繪製完成後,Engine 先釋放排定刪除的物件,再將待加入物件移入正式集合並呼叫其 OnSpawn()。新物件在下一幀才進入更新、碰撞與繪製。

如果幀末的 OnSpawn() 丟出例外,Engine 會移除並釋放該物件,例外離開 Run()。呼叫端可以在 main() 捕捉並印出錯誤;已存在的 Engine 資源仍會由解構流程清理。

Summary

  • 更新後的座標和 z-index 會影響同一幀的碰撞與繪製。
  • 碰撞和更新使用 spawn 順序,繪製使用 z-index 的 stable sort。
  • Overlay 在所有 GridObject 後更新與繪製。
  • runtime spawn 與實際 delete 在幀末套用。