更快地创建指针映射或if语句

Faster to create map of pointers or if statement

本文关键字:if 语句 映射 指针 创建      更新时间:2023-10-16

我正在使用C++和SFML创建一个游戏引擎。我有一个名为character的类,它将成为游戏中实体的基础。physics类还将处理角色移动。

我的问题是,创建一个指向在一帧中移动的字符的指针向量会更快吗。然后,每当函数移动一个字符时,它都会将其放置在该向量内。physics类处理完向量后,它会被清除吗?

或者,让一个bool变量在函数移动character时设置为true,然后在我的physics类中有一个if语句来测试每个character的移动,这样会更快吗?

编辑:好的,我采用了一种不同的方法,Physics类中的一个函数负责处理角色移动。移动后,它会立即测试碰撞检测。如果发生碰撞,它会停止向那个方向移动。

感谢你们的帮助伙计们

与程序中正在进行的所有其他内容(物理、图形)相比,这不会有什么不同。使用使编程更容易的方法,因为您根本不会注意到运行时的差异。

如果字符总数相对较少,则不会注意到两种方法之间的差异。

否则(字符数量很大),如果大多数字符在一帧中移动,那么在字符内部使用标志的方法似乎更合适,因为即使使用移动字符的向量,也会遍历所有字符,此外,还需要维护向量的额外开销。

否则(字符数量很大,但在一帧中只有很少的字符移动),可能更好地使用vector,因为它可以通过不遍历未移动的字符来节省时间。

什么是小数字还是大数字,取决于您的应用程序。您应该使用这两种方法中的任何一种来测试在哪些条件下可以获得更好的性能。

现在是引用霍尔的恰当时机,但我弃权。然而,通常情况下,您应该在优化之前进行配置文件(如果并且仅当时间预算在最低规格的硬件上不够——如果您的游戏在目标硬件上以60fps的速度运行,您将不会做任何事情)
更有可能的是,实际的物理计算将是限制因素,而不是进行"这个单元在移动吗?"检查。此外,提交抽奖电话更有可能会咬到你,而不是检查几百个左右的单元。

作为一件"显而易见"的事情,保持对象指针的矢量并只处理实际移动的单元似乎更快。然而,"显而易见"并不总是正确的。在更多的元素上线性迭代可能比四处跳跃更快(由于缓存)。同样,如果你游戏的这一部分被确定为瓶颈(可能性很小),那么你必须衡量哪个更好。