1

I'm making a simple game in C#/XNA. My actors store the direction in which they intend to go as a Vector2. At each update cycle, I normalize the heading (because of the way it's set can lead to different lengths) and add heading*Speed to position to move the actor.

This seems inelegant. Logically, a direction has no length, it is of unit length by definition. Practically, the constant normalization has trivial extraneous computational cost.

  1. Is there a NormalizedVector2 in XNA?
  2. How do I go about creating one which is compatible with XNA's Vector2 (ie can be added to it and so on)? Extend Vector2 and override the Length property?
  3. Are there larger conceptual problems with how I am trying to accomplish what I am trying to accomplish?
4

3 回答 3

2
  1. 不,唯一的二维向量Vector2在 XNA 中。
  2. 你不能。由于Vector2是 a struct,因此您不能对其进行分类。但是,您可以创建自己的类型并提供将其转换Vector2为 a 的方法(通过创建一个新的Vector2)。

实际上,我怀疑您当前的方法(使用Vector2并仅调用Normalize可能是最好的方法。如果您真的担心很多调用,请使用使用and作为参数的重载refout,因为它的效率略高。

于 2012-10-13T01:26:51.403 回答
0
  1. 不是我知道的
  2. 如前所述,Vector 不能被子类化,但您可以创建一个 Direction 类来处理计算并且可以解析为 Vector2 或仅具有 Vector 属性。
  3. 我只会使用一个单一的向量并使用一个矩阵来旋转它。在性能方面,它避免了通常是缓慢操作的除法。即使在逻辑方面,更常见的是将方向表示为向左 30°,而不是 x + y。
于 2012-10-13T01:47:15.020 回答
-2

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

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

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

于 2012-10-13T12:14:19.723 回答