2011-08-26 53 views
2

我正在制作自己的游戏过程中。其中一个目标是在世界上尽可能多的物体。在这个游戏中,许多物体需要在一段不可预知的时间内被创造出来(比如武器发射会产生一个物体),而且一旦物体碰到物体,物体就需要被破坏(也许它碰到的东西) 。如何有效地处理内存中多个对象的创建/销毁?

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

所以香港专业教育学院还以为我可以尽量保持在内存中的对象的数量,这样我可以直接复制的信息放进去,并利用它们,而不必要求存储为他们的需求。但是我应该试着保留多少内存?或者只要用户计算机有足够的空间(假设他们将专注于游戏而不是在后台运行天气模拟),我是否应该不担心这一点。

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

回答

2

简答:它取决于对象的预期寿命。

通常,这些方法是组合的。一个相当静态的对象,不可能经常被移除或创建(通常是玩家,关卡,关卡中的某些对象等),这些对象是用你描述的第一种方法创建的(对象列表,数组,单例,等等)确切的方法取决于游戏和正在创建的对象。

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

1

在实时游戏,其中流动性是至关重要的,他们往往在年初水平分配一个大的内存块,并避免了在游戏中的任何中间分配/释放。

你经常可以设计这样的游戏机制防止内存溢出的游戏(例如,当玩家射击太多太频繁提高武器干扰的几率)。

虽然最终,测试在您指定的最低支持机器游戏,如果它足够快有那么它的速度不够快,不要过于复杂的代码的假设情况。

相关问题