【问题标题】:Cannot Modify Return Value because It is not a Variable无法修改返回值,因为它不是变量
【发布时间】:2014-03-01 06:24:43
【问题描述】:

价值传递再次来袭!!

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 行需要修复,并且希望现在有某种捷径。

【问题讨论】:

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


    【解决方案1】:

    您不能在 XNA 中直接修改 Vector 的 X、Y、Z 等属性。您可以尝试基于player 像这样创建一个新的Vector2。这会将您的 3 行代码减少到 1(如果这是您想要的):

    player.Vector = New Vector2(player.Vector.X - player.Speed * 
        (float)gameTime.ElapsedGameTime.TotalSeconds, player.Vector.Y);
    

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

    【讨论】:

    • 对不起,如果我误解了这个问题,但我以为你想缩短代码。更直接地回答您的问题:不,无法更改 XNA 中向量的单个组件。 :)
    • 当然。抱歉,我一开始没看懂。 (顺便说一句,我对答案投了反对票,因为我认为它真的应该是一个评论,但是一旦我意识到你认为这很好,我就取消了它:)。)
    【解决方案2】:

    这可能永远不会有“捷径”,因为它是值类型和引用类型之间根本区别的一个特征。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-15
      相关资源
      最近更新 更多