2009-07-12 73 views
1

我遊戲中的每種敵人類型都是不同的類,實例存儲在C數組中。在主遊戲循環中update()對每個敵人/物品實例運行,並且運行draw()。一些update()命令需要知道主玩家在哪裏。將該信息提供給實例的最佳途徑是什麼?我認爲全局變量不是一個明智的方式,因爲多人遊戲選項可能會在稍後添加。我應該如何讓自己的遊戲實體瞭解周圍的事物?

這只是一個更大問題的例子,這就是遊戲中的事情應該如何相互瞭解。例如,敵人會如何知道他們正在與其他敵人發生碰撞。

回答

3

你需要建立一個多分支的樹型結構(不是簡單的二進制樹)。節點是遊戲中的位置。每個節點可以包含多個簡單的結構/對象指針(取決於您的編程語言)。隨着玩家在遊戲中移動,您將玩家位置指針移至代表位置的樹節點。當你開始遊戲時,這個樹型結構中會填滿東西,怪物等。隨機種子也可以用來散佈怪物。

這有助於提高遊戲速度,因爲您只需要搜索當前節點和距離當前位置/節點一步的節點。任何例程都觸發怪物前進或後退,只是將怪物指針移動到下一個節點或節點。如果一個救護包則使用它的指針從室內/節點,它是在破壞。

好運

0

控制器實體?

您需要仔細思考如何使用普通數組,通過大型數組進行線性搜索可能會非常耗時以搜索諸如碰撞之類的事情。

+0

我想我不知道更好。我應該用什麼來代替? – Jameson 2009-07-12 16:55:51

3

使搜索效率更高一種方法是將正在更新的實體拆分爲四叉樹。樹會根據屏幕上的位置或您設置的遊戲世界進行劃分。這樣你就可以設置它,只有在實體得到更新時纔會這樣做。例如,如果你正在進行命中檢測,你完全可以忽略大羣體。

quad trees

希望幫助

0

所有遊戲中的實體,包括球員,應該是在同一容器中。你的AI會在每一幀中遍歷它們並調用執行所有實體所有目標的函數。

實體(如玩家)可以通過相同的容器訪問所有其他實體。

但是,您必須聰明一點才能讓實體訪問容器。

相關問題