gpt4 book ai didi

windows - 如何有效地处理内存中许多对象的创建/销毁?

转载 作者:可可西里 更新时间:2023-11-01 10:08:39 28 4
gpt4 key购买 nike

我正在制作自己的游戏。目标之一是在世界中拥有尽可能多的物体。在这个游戏中,需要在一些不可预测的时间段内创建许多对象(比如武器开火会创建一个对象),一旦该弹丸击中某物,该对象也需要被摧毁(也许它击中的东西) .

所以我想知道在内存中处理这个问题的最佳方法是什么。我想过创建一个堆栈或表,并在其中添加指向这些对象的指针,并根据需要创建和销毁这些对象,但是,如果在帧之间尝试同时创建或销毁数百(或数千)个对象怎么办?我想保持稳定和流畅的帧率,而系统调用的激增肯定会减慢它的速度。

所以我想我可以尝试在内存中保留一些对象,这样我就可以将信息复制到它们中,然后使用它们而不必按需为它们请求内存。但是我应该保留多少内存呢?或者我不应该担心,只要用户的计算机有足够的空间(大概他们会专注于游戏而不是在后台运行天气模拟)。

处理此问题的最佳方法是什么?

最佳答案

简短回答:这取决于对象的预期生命周期。

通常,这些方法是结合在一起的。使用您描述的第一种方法(对象列表、数组、单例、等)具体方法取决于游戏和创建的对象。

对于短期物体,比如子弹、粒子效果,或者在某些游戏中,敌人本身,比如 object pool pattern通常使用。一段内存在游戏开始时被反转,并在整个游戏过程中重复使用,用于子弹和漂亮的粒子效果。至于我应该保留多少内存?,理想的答案是“尽可能少”。不幸的是,有时很难弄清楚这一点。弄清楚的最好方法是猜测你计划在任何给定时间在屏幕上显示多少颗子弹或诸如此类的东西,乘以二(因为当你决定你的子弹 hell 射击游戏真的不能很好地工作时只有 50 发子弹)然后添加一点缓冲。为了更简单,将该值存储在易于理解的 #define BULLET_MAX 110 中,以便您可以在游戏接近完成时更改它,并且您可以合理地确定该值不会波动一样大。为了获得额外的乐趣,您可以将该值绑定(bind)到一个配置变量中,并让图形设置影响它。

关于windows - 如何有效地处理内存中许多对象的创建/销毁?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7211440/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com