C# 随着游戏时间移动精灵,为什么我需要使用+;=?

C# 随着游戏时间移动精灵,为什么我需要使用+;=?,c#,xna,C#,Xna,我正在尝试使用变量gameTime.ElapsedGameTime.TotalMillicles移动2D测试精灵 更新精灵位置的代码如下所示: spritePosition.X += (float)gameTime.ElapsedGameTime.TotalMilliseconds; 使用上面的线,精灵在运行时按预期向右移动 但是我不明白为什么我需要“+=”这个词。也就是说,为什么以下各项不起作用: spritePosition.X = (float)gameTime.ElapsedGameT

我正在尝试使用变量gameTime.ElapsedGameTime.TotalMillicles移动2D测试精灵

更新精灵位置的代码如下所示:

spritePosition.X += (float)gameTime.ElapsedGameTime.TotalMilliseconds;
使用上面的线,精灵在运行时按预期向右移动

但是我不明白为什么我需要“+=”这个词。也就是说,为什么以下各项不起作用:

spritePosition.X = (float)gameTime.ElapsedGameTime.TotalMilliseconds;
(我知道x+=1是x=x+1的缩写)

我正在将游戏时间传递给更新功能,它是否应该不断变化(从而不断移动精灵)?我觉得我直接错过了什么

编辑:精灵不会加速。(我可以用秒而不是毫秒来测试这一点,很明显它只以每秒1个像素的速度移动,而不是加速)

信息:

语言:C# 我正在使用XNA windows游戏模板
上面这一行是在更新函数中调用的,区别在于
+=
添加到
spritePosition.X
的当前值,而
=
只分配一个新值

如果
spritePosition.X
的值为
5
并且
gameTime.ElapsedGameTime.totalmillizes
的值为10(为了这个参数),那么代码的第一行计算结果为:

spritePosition.X += (float)gameTime.ElapsedGameTime.TotalMilliseconds;

spritePosition.X = spritePosition.X + (float)gameTime.ElapsedGameTime.TotalMilliseconds;

spritePosition.X = 5 + (float)10;  // 15
spritePosition.X = (float)gameTime.ElapsedGameTime.TotalMilliseconds;

spritePosition.X = (float)10;      // 10
鉴于第二种评估结果为:

spritePosition.X += (float)gameTime.ElapsedGameTime.TotalMilliseconds;

spritePosition.X = spritePosition.X + (float)gameTime.ElapsedGameTime.TotalMilliseconds;

spritePosition.X = 5 + (float)10;  // 15
spritePosition.X = (float)gameTime.ElapsedGameTime.TotalMilliseconds;

spritePosition.X = (float)10;      // 10

这是因为
gameTime.ElapsedGameTime
是从最后一帧开始经过的时间。这意味着如果你以60帧/秒的速度跑步,它将始终保持在1/60秒左右

您正在将位置设置为常量值

请参阅上的描述

游戏时间。ElapsedGameTime
是自上次更新以来的时间。因此,您需要添加此增量,因此+=。您将使用=表示绝对时间(
gameTime.TotalGameTime

您需要
ElapsedGameTime
,因为您不知道调用更新的频率。所以,如果你想要恒定的速度,比如说1000px/s,你每秒只会得到1次更新调用(例如cpu速度慢)
ElapsedGameTime
每次将是1000ms,你将每秒移动精灵1000px

如果您获得50fps(每秒50次更新调用)
ElapsedGameTime
将始终为20ms,并且您每秒移动sprite 50*20ms=1000px

这样,您就不需要关心cpu的滞后或速度


在你的例子中,这并不重要。因为你只做线性移动,所以你可以使用
Position.X=TotalGameTime
做同样的事情。但是,当您需要根据自上次更新以来精灵自身的速度确定精灵移动了多远时,您需要
位置+=ElapsedGameTime*(对象/精灵速度)

您的精灵是否在加速?否不加速。我将把这个添加到上面的帖子中,因为这是我觉得奇怪的。当sP.X=elapsedTime时,预期的行为将是精灵在X方向以恒定速度移动。当sP.X+=elapsedTime时,预期的行为将是精灵以越来越快的速度移动。elapsedTime是每次迭代都在增加,还是一个游戏步骤之间的时间间隔?我不得不承认我不知道经过的时间的输入和输出,但据我所知,它是一个全局变量,随时间而增加,而不是迭代。我明白我的想法。问题是,为什么我需要添加值?随着游戏时间的增加,据我所知,精灵的位置也会增加。(见上文编辑)。但基本上精灵不会加速(我认为它应该加速)。当我只用“=”(而不是“+=”)时,它会保持静止,这我也不明白。谢谢回答Metafight只是因为他先到了那里。答对了。谢谢15字符