簡體   English   中英

我應該如何在游戲中存儲和使用槍聲數據?

[英]How should I store and and use gun fire data in a game?

在此游戲中,我有3座防御塔(數量可配置),每3秒以30公里/小時的速度發射“子彈”。 這些防御塔有雷達,並且只有在玩家在塔雷達下方時才開始發射。 那不是問題。

我的問題是如何為槍火存儲數據。 我不確定每個子彈到底需要什么數據,但是我想到的當然是子彈的位置。 讓我們假設我現在只需要存儲它(我已經為3D點定義了一個結構)。

我是否應該設法弄清楚游戲在特定點上可以擁有的最大子彈數量,並聲明一個具有該大小的數組? 我應該使用鏈表嗎? 也許還有其他東西?

我真的不知道該怎么做。 我不需要任何幻想或復雜的東西。 可以正常工作且易於使用和實現的基本功能已綽綽有余。

PS:我沒有在游戲開發網站上發布此問題(盡管有標簽),因為我認為這里更合適。

通常,固定長度的數組不是一個好主意。

給定您的游戲模型,我不會選擇不允許刪除O(1)的任何數據結構。 無論如何,這排除了純數組,並且可能會建議一個鏈表。 但是,應通過使用具有正確屬性的通用容器類來抽象出底層細節。

至於你應該存儲什么

  1. 位置(如您所述)
  2. 速度
  3. 損壞因素(您的槍可升級的,不是嗎?)
  4. 最大范圍(同上)

編輯 對於稍微復雜的問題,STL類始終會復制放入其中的元素,因此在實踐中,如果任何屬性可能在對象的生命周期內發生變化,則需要在堆上分配結構並存儲(智能?)指針給他們的收藏。

我可能會使用std::vectorstd::list 最簡單的方法。

警告:如果您要為非常受限的平台(緩慢的CPU,很少的內存)進行編碼,那么使用普通的固定大小的C數組可能是有意義的。 但這幾天不太可能。 從最容易編寫的代碼開始,然后在只有事實證明您負擔不起抽象時才進行更改。

我想您可以從std::vector<BulletInfo> ,然后從那里開始看看它是如何工作的。 它提供了類似數組的接口,但是可以動態調整大小。

在這種情況下,我更喜歡使用稍微復雜一些的方法來管理項目符號。 由於屏幕上可能出現的子彈數量與塔的數量直接相關,因此我將在每個塔類內保留一小段固定長度的子彈。 每當塔發射子彈時,它都會搜索其陣列,找到未使用的子彈,為子彈設置新的位置/速度並將其標記為活動。

稍微復雜一點的是,我想在外部經理中保留子彈列表,例如BulletManager。 創建每個塔后,塔會將所有子彈添加到中央管理器中。 然后,中央經理可以負責更新項目符號。

我喜歡這種方法,因為它可以輕松地管理與項目符號有關的內存限制,只需調整“活動塔數”編號,便會為您創建所有項目符號。 您不需要動態分配項目符號,因為它們都被集中在一起,並且您沒有一個中央池,您在添加/刪除塔時經常需要更改其大小。

因為確實有一個帶有指針列表的中央管理器,所以它確實需要一點移動開銷。 而且,您需要小心,始終從中央管理器中清除損壞的塔中的所有子彈。 但是對我來說,好處是值得的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM