使用标准化向量来存储标题

时间:2012-10-13 01:13:55

标签: c# vector xna game-physics

我在C#/ XNA中制作一个简单的游戏。我的演员将他们想要的方向存储为Vector2。在每个更新周期,我标准化标题(因为它的设置方式可以导致不同的长度)并添加heading*Speed到位置以移动actor。

这似乎不优雅。从逻辑上讲,方向没有长度,根据定义它是单位长度。实际上,常数归一化具有无关紧要的额外计算成本。

  1. XNA中是否有NormalizedVector2
  2. 如何创建一个与XNA Vector2兼容的(即可以添加到其中等等)?扩展Vector2并覆盖Length属性?
  3. 我正在努力完成我想要完成的工作,是否存在更大的概念性问题?

3 个答案:

答案 0 :(得分:2)

  1. 否。 XNA中唯一的2D矢量是Vector2
  2. 你不能。由于Vector2struct,因此您无法对其进行处理。您可以创建自己的类型并提供转换为Vector2的方法(通过创建新的Vector2),但是。
  3. 实际上,我怀疑你当前的方法(使用Vector2而只是调用Normalize可能是最好的方法。如果你真的担心很多电话,请使用the overload which uses ref and out作为参数,因为它的效率稍高。

答案 1 :(得分:0)

  1. 不是我知道
  2. 如上所述,Vector不能被子类化,但您可以创建一个Direction类来处理计算,可以将其解析为Vector2或只是一个Vector proerpty。
  3. 我会使用单一向量并使用矩阵旋转它。在性能方面,它避免了通常是缓慢操作的划分。 即使在逻辑方面,更常见的是将方向表示为左侧30°,而不是x + y。

答案 2 :(得分:-2)

我错过了什么吗?归一化向量只是一个向量,其中x + y总计为1并指向一个方向。它没有长度,就像任何载体一样。

您可以将标准化向量存储在相同类型的向量中。当然,当你需要改变某些方向时,你需要更新它。

这是一个相当简单的概念: http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.vector2.normalize.aspx