降低XNA中的运行速度

降低XNA中的运行速度,xna,Xna,我不知道是否有办法降低运行速度(更新和提取通话间隔时间) 我需要降低通话的频率,因为它们发生得太快了,这会导致在很短的时间内显示我需要显示的内容,如此之少以至于用户实际上看不到任何东西 目标是更缓慢地显示代表我的应用程序逻辑的内容的进度 如果标题不清楚,我会参考XNA游戏框架。我在MSDN中找到了答案。将该键设置为true IsFixedTimeStep,然后增加或减少变量TargetReleasedTime 首先,我需要将属性IsFixedTimeStep设置为true,然后我可以使用变量ta

我不知道是否有办法降低运行速度(更新和提取通话间隔时间)

我需要降低通话的频率,因为它们发生得太快了,这会导致在很短的时间内显示我需要显示的内容,如此之少以至于用户实际上看不到任何东西

目标是更缓慢地显示代表我的应用程序逻辑的内容的进度


如果标题不清楚,我会参考XNA游戏框架。

我在MSDN中找到了答案。将该键设置为true IsFixedTimeStep,然后增加或减少变量TargetReleasedTime

首先,我需要将属性IsFixedTimeStep设置为true,然后我可以使用变量targeteteReleasedTime(调用更新的速率),默认值为1/60秒,对于我需要显示的内容来说太快了,所以我在1/2秒内设置它,并在运行时添加两个键来修改此值

IsFixedTimeStep = true;
TargetElapsedTime = TimeSpan.FromSeconds(0.5);
然后在update方法中,我可以使用targeteLassedTime来加速和减慢更新调用:

if ((Keyboard.GetState().IsKeyDown(Keys.W)))
{
    TargetElapsedTime += TimeSpan.FromSeconds(0.1f);
}
if ((Keyboard.GetState().IsKeyDown(Keys.S)))
{
   if ((TargetElapsedTime - TimeSpan.FromSeconds(0.1f))>TimeSpan.Zero)
   {
       TargetElapsedTime -= TimeSpan.FromSeconds(0.1f);    
   }

}

我在MSDN中找到了答案。将该键设置为true IsFixedTimeStep,然后增加或减少变量TargetReleasedTime

首先,我需要将属性IsFixedTimeStep设置为true,然后我可以使用变量targeteteReleasedTime(调用更新的速率),默认值为1/60秒,对于我需要显示的内容来说太快了,所以我在1/2秒内设置它,并在运行时添加两个键来修改此值

IsFixedTimeStep = true;
TargetElapsedTime = TimeSpan.FromSeconds(0.5);
然后在update方法中,我可以使用targeteLassedTime来加速和减慢更新调用:

if ((Keyboard.GetState().IsKeyDown(Keys.W)))
{
    TargetElapsedTime += TimeSpan.FromSeconds(0.1f);
}
if ((Keyboard.GetState().IsKeyDown(Keys.S)))
{
   if ((TargetElapsedTime - TimeSpan.FromSeconds(0.1f))>TimeSpan.Zero)
   {
       TargetElapsedTime -= TimeSpan.FromSeconds(0.1f);    
   }

}

我建议你在更新方法中加入一些代码,每x秒更新一次游戏逻辑

定义:

int millisecondsPerFrame = 1000 //Update every 1 second
int timeSinceLastUpdate = 0 //Accumulate the elapsed time
现在,在您的更新中,您可以有如下内容:

timeSinceLastUpdate += gameTime.ElapsedGameTime.TotalMilliseconds;
if(timeSinceLastUpdate >= millisecondsPerFrame)
{
     timeSinceLastUpdate = 0;

     //YOUR GAMES LOGIC GOES HERE
}

使用这种方法,你不必放慢整个程序的速度。

我建议你在更新方法中加入一些代码,每x秒更新一次游戏逻辑

定义:

int millisecondsPerFrame = 1000 //Update every 1 second
int timeSinceLastUpdate = 0 //Accumulate the elapsed time
现在,在您的更新中,您可以有如下内容:

timeSinceLastUpdate += gameTime.ElapsedGameTime.TotalMilliseconds;
if(timeSinceLastUpdate >= millisecondsPerFrame)
{
     timeSinceLastUpdate = 0;

     //YOUR GAMES LOGIC GOES HERE
}

使用这种方法,您不必放慢整个程序的速度。

我同意这里的一些其他答案。你真的不想减慢游戏的执行速度。这样做没有什么意义。另外,当你被固定的时间所束缚时,以后的设计会变得更加困难

使用时间增量的问题在于,您永远无法确定更新方法的调用频率。有许多因素可能会导致此运行过快或过慢。如果您的游戏循环运行缓慢,即使是很小的一部分,您也可能会错过游戏中的整个滴答声。对于像体育比赛这样的事情来说,这是不好的

取而代之的是使用计时器。NET有一个惊人的事件模型和一个预构建的计时器类。它被初始化,你告诉它你想要循环的频率。每个循环将触发一个您可以收听的事件。这有两个好处。首先,你可以确信你的蜱虫会在你要求的时候或在你要求的时候发出。其次,它不会在主游戏逻辑中运行,从而使您的程序能够以更好的方式进行结构化。您甚至可以将多个事件绑定到计时器,从而使代码更加模块化

试试这个

//create a new instance of a timer 
//and set it to 1000 millisecond interval(1 second)
Timer t = new Timer(1000);

//Add a listener to the elapsed event
t.Elapsed += new ElapsedEventHandler(t_Elapsed);

//start the timer
t.Start();

void t_Elapsed(object sender, ElapsedEventArgs e)
{
    // I am called each second
}

我同意这里的一些其他答案。你真的不想减慢游戏的执行速度。这样做没有什么意义。另外,当你被固定的时间所束缚时,以后的设计会变得更加困难

使用时间增量的问题在于,您永远无法确定更新方法的调用频率。有许多因素可能会导致此运行过快或过慢。如果您的游戏循环运行缓慢,即使是很小的一部分,您也可能会错过游戏中的整个滴答声。对于像体育比赛这样的事情来说,这是不好的

取而代之的是使用计时器。NET有一个惊人的事件模型和一个预构建的计时器类。它被初始化,你告诉它你想要循环的频率。每个循环将触发一个您可以收听的事件。这有两个好处。首先,你可以确信你的蜱虫会在你要求的时候或在你要求的时候发出。其次,它不会在主游戏逻辑中运行,从而使您的程序能够以更好的方式进行结构化。您甚至可以将多个事件绑定到计时器,从而使代码更加模块化

试试这个

//create a new instance of a timer 
//and set it to 1000 millisecond interval(1 second)
Timer t = new Timer(1000);

//Add a listener to the elapsed event
t.Elapsed += new ElapsedEventHandler(t_Elapsed);

//start the timer
t.Start();

void t_Elapsed(object sender, ElapsedEventArgs e)
{
    // I am called each second
}

你想让游戏慢下来吗?你能解释一下这意味着什么吗:想更慢地显示代表我的应用程序逻辑的进程吗?你不应该依赖于首先调用更新/绘制的速度,无法保证它们以恒定的速度被调用。@Steve H:Update and Draw方法调用的实际速度太快,无法显示我需要显示的内容。@Ardman:是的,放慢速度,加快速度,我已经找到了解决方案,看看我对这个问题所做的编辑你想让游戏慢下来吗?你能解释一下这意味着什么吗:想更慢地展示代表我应用程序逻辑的东西的进度吗?你不应该首先依赖于调用更新/绘制的速度,无法保证它们以恒定的速度被调用。@Steve H:调用Update and Draw方法时的实际速度太快,无法显示我需要显示的内容。@Ardman:是的,放慢速度,加快速度,我已经找到了解决方案,看看我对问题的版本:)我喜欢你的解决方案,我喜欢你的解决方案,比我的更自然。