我正在設計一個簡單的遊戲,它使用Java 2D和牛頓物理。目前,我的主要「遊戲圈」看起來像:面向對象方式的遊戲設計
do {
for (GameEntity entity : entities) {
entity.update(gameContext);
}
for (Drawable drawable : drawables) {
drawable.draw(graphics2d);
}
} while (gameRunning);
當實體被指示自行更新,將根據當前的力量應用到它調整它的速度和位置。但是,我需要實體展現其他行爲;例如如果一個「壞人」被玩家擊中,該實體應該被銷燬並從遊戲世界中移除。
我的問題:以面向對象的方式達到此目的的最佳方法是什麼?到目前爲止,我見過的所有例子都將遊戲循環合併到一個名爲Game
的God類中,該類執行以下步驟:檢測碰撞,檢查是否壞人死亡,檢查是否玩家死亡,重新繪製等封裝了所有的遊戲狀態(剩餘生命等)。換句話說,這是非常程序和所有的邏輯是在遊戲類。任何人都可以推薦更好的方法?
這裏是我想過的,到目前爲止的選項:
- 傳遞一個
GameContext
從中如果需要,實體可以去除自身或更新的遊戲狀態的每個實體(例如,「不跑」,如果玩家被殺死)。 - 註冊每個
GameEntity
作爲聽衆的中心Game
類和採取事件導向的方法;例如碰撞會導致CollisionEvent
被髮射給碰撞中的兩名參與者。
我想我發現你的錯誤 - 這是'而(gameRunning)'你想有 –