表现:Vector2 vs. x / y

时间:2011-11-03 13:35:23

标签: c# performance xna

我将一些较旧的游戏代码移植到XNA上。我的所有对象都使用x / y(float)和Vector2来描述各种位置等。

除了语法等之外,将旧的x / y类型单位转换为Vector2有一个很好的基于性能的原因,或者我可以只做一个直接端口而不必担心它?

3 个答案:

答案 0 :(得分:5)

我要说使用Vector2的主要原因是它允许您使用重载运算符,这使代码更易于阅读和理解。

就性能而言,考虑到几乎所有游戏都会做得更多,因此会有很少的表现。如果任何2个浮点数可能更快,因为访问一个变量可能比访问一个struct的字段更快(尽管正如Merlyn所说的那样可能最终会相同)。

答案 1 :(得分:2)

使用Vector2在两个重要方面较慢:

创建一个可以导致调用构造函数(尽管在某些典型情况下它将被优化)。这是一个额外的方法调用。 (请注意,它不会分配内存。)

调用方法 - 包括+*等运算符 - 涉及方法调用,这需要时间。直接在float上进行数学运算(并且包括直接在XY成员Vector2上运行 - 也就是说内联运算符)不涉及方法调用,因此更快。

要在其上添加实际数字 - 在+上内联简单运算符(*Vector3)可提高380%的速度(来源:“了解XNA Framework性能“Shawn Hargreaves撰写。”

然而按原样使用矢量类要方便得多。所以除非你像粒子系统或物理引擎那样优化数学代码,否则不要担心它!

(另请注意,包含矢量类型,方法调用的运算符已经非常快!快速制作已经快速的东西并不像快速减慢速度那么有用!通常会有更好的性能改进persue。)

答案 2 :(得分:0)

如果您正在寻找基于效果的答案,我们可以做的最好的就是推测。

只要您想要基于效果的答案,就必须让它发挥作用。所以我会做一个鼓励可维护性的端口,IMO意味着转换为Vector2。然后,在分析系统的过程中,您将消除出现的任何性能瓶颈,包括使用浮点数和Vector2。