XNA - 刷新绘制/更新的频率

时间:2014-02-27 15:26:15

标签: c# xna draw

我是XNA编程的新手,所以我肯定会遇到问题。

我的问题是:当我的玩家从枪中射出子弹时,我会认为这是位置变化(在我的空虚更新()中):

Position.X += (float)Math.Cos(Angle) * Multiplier;
Position.Y += (float)Math.Sin(Angle) * Multiplier;

我认为这很明显。我对任何方向,角度等没有任何问题。我只是好奇如何更频繁地刷新更新。我认为我的乘数应该等于1,以使我的子弹移动顺畅。如果我将我的乘数设置为(例如)50,我的子弹是“跳跃” - 跳过每50 * Cos / Sin像素。当我的子弹将像这样“跳跃”时,许多物体在两个计算的子弹位置之间将避免碰撞。将乘数设置为“1”会使速度变慢。

如何改善这件事?有必要还是我错了?

2 个答案:

答案 0 :(得分:0)

您可以使用Game.TargetElapsedTime Property更改FixedTimeStep,假设您使用的是Game.IsFixedTimeStep = true,但这可能不会加快您的速度,因此您需要有一个乘数> 1然后处理高速错过碰撞的可能性。

人们以各种方式解决这个问题,例如在移动物体之前从物体投射光线并检测这些路径的交叉点。这是一个有趣的问题,它出现了很多。忘记时间步长,将乘数保持在合适的值以获得所需的速度,但搜索StackOverflow / web以进行快速移动/小物体碰撞检测。

答案 1 :(得分:0)

您的更新Methode应如下所示:

void Update(GameTime gameTime)
{
    Position.X += (float)Math.Cos(Angle) * (float)gameTime.ElapsedGameTime.TotalMilliseconds;
    Position.Y += (float)Math.Sin(Angle) * (float)gameTime.ElapsedGameTime.TotalMilliseconds;
}

您必须使用ElapsedGameTime在不同的计算机上存档相同的游戏速度。如果不使用elapsedGameTime,你的游戏可以在高端计算机上运行得非常快,因为cpu有更多的权力来调用更新Methode。 (单位在高端计算机上快速运行和拍摄(或者他们应该做的任何事情))

您还必须使用gameTime来创建可玩的多人游戏。

你不应该触摸FixedTimeStep!

- XNA调用尽可能多地使用更新方法(取决于你的硬件......固定时间,每次最多60次,使用FixedTimeStep = true)!!

(float)gameTime.ElapsedGameTime.TotalMilliseconds - 这应该返回16.667左右的东西

如果这很多,你必须减少变量“Angle”的值