我将一些较旧的游戏代码移植到XNA上。我的所有对象都使用x / y(float)和Vector2来描述各种位置等。
除了语法等之外,将旧的x / y类型单位转换为Vector2有一个很好的基于性能的原因,或者我可以只做一个直接端口而不必担心它?
答案 0 :(得分:5)
我要说使用Vector2
的主要原因是它允许您使用重载运算符,这使代码更易于阅读和理解。
就性能而言,考虑到几乎所有游戏都会做得更多,因此会有很少的表现。如果任何2个浮点数可能更快,因为访问一个变量可能比访问一个struct的字段更快(尽管正如Merlyn所说的那样可能最终会相同)。
答案 1 :(得分:2)
使用Vector2
在两个重要方面较慢:
创建一个可以导致调用构造函数(尽管在某些典型情况下它将被优化)。这是一个额外的方法调用。 (请注意,它不会分配内存。)
调用方法 - 包括+
和*
等运算符 - 涉及方法调用,这需要时间。直接在float
上进行数学运算(并且包括直接在X
和Y
成员Vector2
上运行 - 也就是说内联运算符)不涉及方法调用,因此更快。
要在其上添加实际数字 - 在+
上内联简单运算符(*
和Vector3
)可提高380%的速度(来源:“了解XNA Framework性能“Shawn Hargreaves撰写。”
然而按原样使用矢量类要方便得多。所以除非你像粒子系统或物理引擎那样优化数学代码,否则不要担心它!
(另请注意,包含矢量类型,方法调用的运算符已经非常快!快速制作已经快速的东西并不像快速减慢速度那么有用!通常会有更好的性能改进persue。)
答案 2 :(得分:0)
如果您正在寻找基于效果的答案,我们可以做的最好的就是推测。
只要您想要基于效果的答案,就必须让它发挥作用。所以我会做一个鼓励可维护性的端口,IMO意味着转换为Vector2。然后,在分析系统的过程中,您将消除出现的任何性能瓶颈,包括使用浮点数和Vector2。