我不知道是否有办法降低跑步速度(通话之间的更新和抽奖时间)。
我需要减慢通话的频率,因为它们发生得太快,而且结果是显示我需要在很短的时间内显示的内容,实际上用户看不到任何东西。
目标是更慢地显示代表我的应用程序逻辑的进度。
如果标题不清楚,我参考XNA游戏框架。
答案 0 :(得分:4)
我建议你在Update方法中加入一些代码,每隔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
}
使用这种方法,您不必放慢整个程序的速度。
答案 1 :(得分:1)
我在MSDN中找到了答案。键设置为IsFixedTimeStep,然后增加或减少变量TargetElapsedTime
首先我需要将属性IsFixedTimeStep设置为true,然后我可以使用变量TargetElapsedTime(更新调用的速率),默认为1/60秒,对于我需要显示的内容来说太快了,所以我在1/2秒内设置它,并添加两个键以在运行时修改该值。
IsFixedTimeStep = true;
TargetElapsedTime = TimeSpan.FromSeconds(0.5);
然后在更新方法中,我可以使用TargetElapsedTime来加速并减慢更新调用:
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);
}
}
答案 2 :(得分:0)
我同意这里的其他一些答案。你真的不想放慢游戏的执行速度。这样做没什么意义。随着时间的推移,在轨道上的设计变得更加困难。
使用时间增量的问题在于,您永远无法确定调用更新方法的频率。有许多因素可能导致此运行太快或太慢。如果您的游戏循环运行缓慢,即使是一小部分,您也可能错过游戏中的整个刻度。对于像体育比赛这样的事情,这会很糟糕。
而是使用计时器。 .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
}