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

时间:2014-08-27 08:50:52

标签: c++ if-statement vector sfml

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

我的问题是,创建一个指向帧中移动的字符的指针向量是否更快。然后,只要函数移动一个字符,它就会将它放在该向量中。完成physics类处理向量后,它会被清除吗?

或者,当函数移动bool并且在我的character类中有一个if语句来测试每个{{physics时,将character变量设置为true会更快1}}用于运动?

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

感谢您的帮助

3 个答案:

答案 0 :(得分:4)

与您程序中正在进行的所有其他事情(物理,图形)相比,这不会产生任何影响。使用使编程更容易的方法,因为您根本不会注意到运行时差异。

答案 1 :(得分:2)

如果字符总数相对较小,那么您将不会注意到这些方法之间的区别。

否则(字符数很大),如果大多数字符在一个帧中移动,那么在字符内部使用标记的方法似乎更合适,因为即使使用移动字符的向量,您也将遍历所有字符和除此之外,您还可以获得维护矢量的额外开销。

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

什么是小数或大数,取决于您的应用程序。您应该测试使用哪种方法在哪些条件下获得更好的性能。

答案 2 :(得分:1)

现在是引用Hoare的正确时间,但我会弃权。但是,一般情况下,您应该在优化之前进行配置(如果且仅当最小规格硬件上的时间预算不足时 - 如果您的游戏在目标硬件上以60fps运行,那么您将无需任何其他任何东西)。
实际的物理计算更有可能是限制因素,而不是“这个单位在移动吗?”校验。此外,提交抽奖电话的可能性更大,而不是检查几百个单位。

作为一个“显而易见”的东西,持有对象指针向量并且只处理实际移动的单位似乎更快。然而,“显而易见”并不总是正确的。在更多数量的元素上线性迭代可以比跳转更快(由于缓存)。同样,如果你的游戏的这一部分被识别为瓶颈(非常不可能),那么你将不得不衡量更好。