无法修改返回值,因为它不是变量

时间:2014-02-05 01:11:16

标签: c# vector xna return pass-by-value

再次通过价值击中!!

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行问题,并且希望现在有某种捷径。

2 个答案:

答案 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);

这应该与“修复”完全相同,除了一行。同样的想法适用于Vector3Vector4,如果您想要修改向量的多个属性。