游戏中的多态性

时间:2014-10-15 06:00:52

标签: c++ performance polymorphism

我正在用C ++制作游戏,我正在考虑是否使用多态。 我知道在大多数时候使用多态性更好,但问题是我在游戏中制作了一些粒子效果,并且有一百个它们在一秒钟内弹出。如果我在这种情况下使用多态,我会经常分配和释放内存,这肯定会减慢游戏速度。

那么,我是否应该使用多态,甚至必须经常使用New / Delete对象?

顺便说一句,如果我的语法坏了,请纠正我。我还在学习英语。

2 个答案:

答案 0 :(得分:2)

如果你不使用多态,你仍然需要相同数量的new / delete来创建所有粒子。多态性不会显着降低您的表现。它只会导致一些间接函数调用,而不是直接调用。这是几乎所有现代CPU的指令集都支持的。

因此,如果多态性可以很好地解决您的游戏设计问题,那就去吧。

回到初始问题创建/删除大量类似对象(如粒子)的问题,您可以考虑使用flyweight设计模式,“使用共享来支持大量的细粒度有效的对象“(设计模式,Gamma& al。)

答案 1 :(得分:1)

我认为使用多态的简单事实对性能本身没有影响或影响很小,这一切都取决于你如何设计你的游戏。

所以我的提示是:

  1. 首先进行一些测试,模拟游戏中可以做的一些事情,看看性能如何,是否可以接受?如果是这样,请不要优化!
  2. 如果性能不错,请追求可维护性!不要害怕在第一时间使用语言资源,然后按照以后更容易维护代码的方式编写代码,而不是Premature Optimization
  3. 如果您遇到性能问题,请尝试找出瓶颈并进行修复。如果您认为问题是因为分配和释放内存的频率,请尝试另一种方法,比如制作某种粒子缓冲区,让粒子呈现一些无效状态,并在需要再次避免释放和分配内存时重新使用它们频繁。