我正在使用C ++和SFML创建游戏引擎。我有一个名为character
的类,它将成为游戏中实体的基础。 physics
类也将处理角色移动。
我的问题是,创建一个指向帧中移动的字符的指针向量是否更快。然后,只要函数移动一个字符,它就会将它放在该向量中。完成physics
类处理向量后,它会被清除吗?
或者,当函数移动bool
并且在我的character
类中有一个if语句来测试每个{{physics
时,将character
变量设置为true会更快1}}用于运动?
修改
好吧,我采用了一种不同的方法,Physics
类中的函数负责处理角色移动。移动后,它会立即测试碰撞检测。如果发生碰撞,它会停止朝那个方向移动。
感谢您的帮助
答案 0 :(得分:4)
与您程序中正在进行的所有其他事情(物理,图形)相比,这不会产生任何影响。使用使编程更容易的方法,因为您根本不会注意到运行时差异。
答案 1 :(得分:2)
如果字符总数相对较小,那么您将不会注意到这些方法之间的区别。
否则(字符数很大),如果大多数字符在一个帧中移动,那么在字符内部使用标记的方法似乎更合适,因为即使使用移动字符的向量,您也将遍历所有字符和除此之外,您还可以获得维护矢量的额外开销。
否则(字符数量很大,但只有少数字符在一帧内移动),可能更好地使用向量,因为它可以通过不遍历字符来节省时间移动。
什么是小数或大数,取决于您的应用程序。您应该测试使用哪种方法在哪些条件下获得更好的性能。
答案 2 :(得分:1)
现在是引用Hoare的正确时间,但我会弃权。但是,一般情况下,您应该在优化之前进行配置(如果且仅当最小规格硬件上的时间预算不足时 - 如果您的游戏在目标硬件上以60fps运行,那么您将无需任何其他任何东西)。
实际的物理计算更有可能是限制因素,而不是“这个单位在移动吗?”校验。此外,提交抽奖电话的可能性更大,而不是检查几百个单位。
作为一个“显而易见”的东西,持有对象指针向量并且只处理实际移动的单位似乎更快。然而,“显而易见”并不总是正确的。在更多数量的元素上线性迭代可以比跳转更快(由于缓存)。同样,如果你的游戏的这一部分被识别为瓶颈(非常不可能),那么你将不得不衡量更好。