我在C#/ XNA中制作一个简单的游戏。我的演员将他们想要的方向存储为Vector2
。在每个更新周期,我标准化标题(因为它的设置方式可以导致不同的长度)并添加heading*Speed
到位置以移动actor。
这似乎不优雅。从逻辑上讲,方向没有长度,根据定义它是单位长度。实际上,常数归一化具有无关紧要的额外计算成本。
NormalizedVector2
Vector2
兼容的(即可以添加到其中等等)?扩展Vector2
并覆盖Length
属性?答案 0 :(得分:2)
Vector2
。Vector2
是struct
,因此您无法对其进行处理。您可以创建自己的类型并提供将转换为Vector2
的方法(通过创建新的Vector2
),但是。实际上,我怀疑你当前的方法(使用Vector2
而只是调用Normalize可能是最好的方法。如果你真的担心很多电话,请使用the overload which uses ref
and out
作为参数,因为它的效率稍高。
答案 1 :(得分:0)
答案 2 :(得分:-2)
我错过了什么吗?归一化向量只是一个向量,其中x + y总计为1并指向一个方向。它没有长度,就像任何载体一样。
您可以将标准化向量存储在相同类型的向量中。当然,当你需要改变某些方向时,你需要更新它。
这是一个相当简单的概念: http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.vector2.normalize.aspx