再次通过价值击中!!
player.Vector.X += player.Speed * (float)gameTime.ElapsedGameTime.TotalSeconds;
不起作用。
Vector2 v = player.Vector;
v.X -= player.Speed * (float)gameTime.ElapsedGameTime.TotalSeconds;
player.Vector = v;
解决了这个问题。
这在此解释:Can't modify XNA Vector components
答案得到了很好的解释并且工作得很好,但是自发布以来已有4年了。 我的问题是,自从4年以来,是否有更好的方法来解决这个问题?
我需要解决大约100行问题,并且希望现在有某种捷径。
答案 0 :(得分:1)
可能永远不会成为“捷径”,因为它是值类型和引用类型之间根本区别的一个特征。
答案 1 :(得分:1)
您无法在XNA中直接修改Vector
的X,Y,Z等属性。您可以尝试创建一个基于Vector2
的新player
。这会将您的3行代码减少为 1 (如果这是您的目的):
player.Vector = New Vector2(player.Vector.X - player.Speed *
(float)gameTime.ElapsedGameTime.TotalSeconds, player.Vector.Y);
这应该与“修复”完全相同,除了一行。同样的想法适用于Vector3
或Vector4
,如果您想要修改向量的多个属性。