c++ - 简单的效率问题 C++(内存分配)..也许一些碰撞检测有帮助?

标签 c++ memory performance allocation

我正在用 C++ 编写一个类似于街机的小游戏(一个多向二维空间射击游戏),并且我正在完成碰撞检测部分。

这是我组织它的方式(我只是编造它所以它可能是一个糟糕的系统):

每艘船都由圆形组件组成 - 每艘船的组件数量是任意的(组件越多,CPU 周期越多)。我有一个 maxComponent 距离,我在创建飞船时计算它,这基本上是我可以从飞船中心绘制到最远组件边缘的最长线。我跟踪屏幕上的东西并使用这个 maxComponentDistance 来查看它们是否足够接近以致于发生碰撞。

如果它们非常接近,我会开始检查不同飞船的组件是否相交。这就是我提出效率问题的地方。

我有一个组件相对于飞船中心的 (x,y) 位置,但它没有说明飞船当前的旋转方式。我让它们保持相对,因为我不想每次船移动时都必须重新计算组件。所以我有一个旋转计算的小公式,我返回一个二维 vector ,对应于相对于船舶中心的旋转考虑位置。

碰撞检测在 GameEngine 中,它使用 2d vector 。我的问题是关于返回类型。我是否应该在每次调用该函数时创建并返回一个二维 vector 对象 或者 我应该给那个组件对象一个额外的私有(private)二维 vector 变量,在函数被调用时编辑这个私有(private)变量,然后返回一个指向那个对象的指针吗?

我不确定内存分配的效率与拥有永久的、可编辑的私有(private)变量的效率。我知道还必须为私有(private)变量分配内存,但不是每次检查冲突时,只有在创建新组件时才分配内存。组件在我的环境中不是常量,因为它们会在飞船被摧毁时被删除。

这是我的主要难题。我也很感激任何关于我的实际碰撞检测系统设计的建议。这是我第一次对此进行破解(也许应该阅读一下)

提前致谢。

最佳答案

你绝对应该尽量避免在每次调用 getter 函数时为你的组件 vector 分配内存。相反,尽可能少地进行分配。例如,您可以在船舶的组件组成发生变化时执行此操作,或者甚至很少(通过过度分配)。

当然,您也可以研究内存池,在内存池中预先分配大量此类组件并将其放入池中,这样您就可以在恒定时间内分配新组件。

在进行这种碰撞检测时,一般(如果太明显,请道歉)要点:对距离求平方,而不是计算平方根。 :)

关于c++ - 简单的效率问题 C++(内存分配)..也许一些碰撞检测有帮助?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/333285/

相关文章:

c++ - 如何阅读此运算符声明和实现?

python - itertools.islice 与列表切片相比

c - 函数中声明的 const 变量的堆栈中是否有只读内存?

java - 布局背景图像的 OutOfMemory 异常

performance - 在显示GPU上使用OpenCL时,如何确保GUI响应?

performance - 如何加速 SORM 中的简单计数操作?

用于信号处理的 C++ 库

c++ - 使用 gfortran 链接 c++ 时 std::basic_string 的 undefined symbol ?

c++ - windows 8 IShellIconOverlayIdentifier 外壳扩展无法正常工作

c - 如何删除对象/结构?