2011-08-26 54 views
2

我正在製作自己的遊戲過程中。其中一個目標是在世界上儘可能多的物體。在這個遊戲中,許多物體需要在一段不可預知的時間內被創造出來(比如武器發射會產生一個物體),而且一旦物體碰到物體,物體就需要被破壞(也許它碰到的東西) 。如何有效地處理內存中多個對象的創建/銷燬?

所以我想知道在內存中處理這個問題的最好方法是什麼。我想過創建一個堆棧或表,並在那裏添加指向這些對象的指針,然後根據需要創建和銷燬這些對象,但是,如果在框架之間嘗試立即創建或銷燬幾百(或幾千)個對象,該怎麼辦?我想保持一個穩定和流暢的幀速率,這樣的系統調用激增肯定會減慢它的速度。

所以香港專業教育學院還以爲我可以儘量保持在內存中的對象的數量,這樣我可以直接複製的信息放進去,並利用它們,而不必要求存儲爲他們的需求。但是我應該試着保留多少內存?或者只要用戶計算機有足夠的空間(假設他們將專注於遊戲而不是在後臺運行天氣模擬),我是否應該不擔心這一點。

處理此問題的最佳方法是什麼?

回答

2

簡答:它取決於對象的預期壽命。

通常,這些方法是組合的。一個相當靜態的對象,不可能經常被移除或創建(通常是玩家,關卡,關卡中的某些對象等),這些對象是用你描述的第一種方法創建的(對象列表,數組,單例,等等)確切的方法取決於遊戲和正在創建的對象。

對於短期物體,如子彈,粒子效應,或者在某些遊戲中,敵人本身通常使用類似object pool pattern的東西。一大塊內存在遊戲開始時被逆轉,並在整個遊戲過程中重複使用子彈和漂亮的粒子效果。至於我應該保留多少內存?,理想的答案是「儘可能少」。不幸的是,有時候很難弄清楚。最好的解決方法是猜測在任何特定時間有多少子彈或屏幕上計劃的東西,乘以2(因爲當你決定你的子彈地獄射手並不能很好地工作時)只有50個子彈),然後添加一個小緩衝區。爲了更容易,將該值存儲在容易理解的#define BULLET_MAX 110中,以便在遊戲接近完成時更改該值,並且可以合理確定該值不會波動很多。爲了獲得更多樂趣,您可以將該值綁定到配置變量中,並使圖形設置對其產生影響。

1

在實時遊戲,其中流動性是至關重要的,他們往往在年初水平分配一個大的內存塊,並避免了在遊戲中的任何中間分配/釋放。

你經常可以設計這樣的遊戲機制防止內存溢出的遊戲(例如,當玩家射擊太多太頻繁提高武器干擾的機率)。

雖然最終,測試在您指定的最低支持機器遊戲,如果它足夠快有那麼它的速度不夠快,不要過於複雜的代碼的假設情況。

相關問題