不能修改返回值,因为它不是一个变量。

3

传值又来作祟了!!

player.Vector.X += player.Speed * (float)gameTime.ElapsedGameTime.TotalSeconds;

无法工作。
Vector2 v = player.Vector;
v.X -= player.Speed * (float)gameTime.ElapsedGameTime.TotalSeconds;
player.Vector = v;

修复此问题。

这里有解释:无法修改 XNA 向量组件

答案已经被很好地解释并且可行,但是自发布以来已经过去了4年。 我的问题是,既然已经过去4年了,现在是否有更好的方法来解决这个问题?

我需要修复约100行代码,希望现在有某种快捷方式。

2个回答

2

这可能永远不会有“捷径”,因为这是值类型和引用类型之间基本差异的特征。


1
您不能直接在XNA中修改Vector的X、Y、Z等属性。您可以尝试创建一个基于player的新Vector2。这将把您的三行代码简化为1行(如果这是您的目标)。
player.Vector = New Vector2(player.Vector.X - player.Speed * 
    (float)gameTime.ElapsedGameTime.TotalSeconds, player.Vector.Y);

这应该准确地完成了“修复”所做的事情,只是用了一行代码。相同的想法也适用于Vector3Vector4,如果你想修改向量的多个属性。

抱歉如果我误解了问题,但我认为你想要缩短代码。更直接地回答你的问题:在XNA中没有办法改变向量的单个组件。 :) - davidsbro
1
当然,抱歉一开始我没理解。顺便说一下,我曾经给那个回答点了踩,因为我认为它应该是一个评论,但是一旦我意识到你认为它很好,我就取消了踩的评价 :) - davidsbro

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接