如何使计时器保持乳宁while循环等待另一次的结果?(How to make timer keep

2019-09-04 00:04发布

我有以下问题,在我的代码,我有这个环上的定时器运行(这是在大的定时器运行循环的只是一小部分),

那个大计时器内(他剔每隔1秒)我有1种方法需要等待5秒钟,则继续循环代码的休息,但我想它不会停留在代码和定时器将继续运行每1秒并不会等待那些5秒。

我做了什么我添加了一个新的计时器(timer_deva)是蜱每5秒,做它里面的所有的检查,然后计时器停止。

所以我的问题是,我需要等待5秒检索值来完成我的代码,但我需要的是我的主定时器将保持同步运行,而当他得到他的结果对其他时间,他需要完成他离开代码背后。

提前致谢,

else if (mobID.Equals(Convert.ToInt32(txtDeva)))
{
    //START CHECK WITH TIMER
    timer_deva.Start();
    //Methods inside timer_deva update the winnerNation
    //END CHECK TIMER - GET RESULT
    winner(zoneId, winnerNation, humansKills, orcKills);
}

Answer 1:

TL;博士

传统的计时器没有在游戏中使用。 游戏有处理他们的逻辑非常不同的机制和经过的时间。

龙版本:

我知道这可能不是直接回答你的问题,但它的办法不多的文字抽筋成一个注释。 你的声音计时器非常复杂和层次。 从你的变量名,我会假设你正在编写游戏。 游戏一般不与定时器或没有你所期望的方式工作。 这种不同的游戏类似的行为会帮助你很多你的计时器的问题,甚至可能会帮助你更与一般的设计。

游戏通常有一些所谓一个game loop 。 一般来说它是被称为一个接一个的循环后三个主要功能:

while(running)
{
    HandleUserInput();
    ChangeWorld();
    Render();
}

你得到用户输入,则相应地改变游戏世界,你把它画到屏幕上。 现在,快你的电脑,速度越快这个循环运行。 这是很好的图形(FPS认为),但糟糕的比赛。 想象一下,俄罗斯方块,每一个帧的块移动。 现在,我不想买一个更快的计算机,游戏将变得更加困难的方式。

因此,为了保持游戏的速度常数独立于计算机的电源,循环认为经过的时间:

while(running)
{
    var timePassedSinceLastLoop = CalculateTimeDelta();

    HandleUserInput();
    ChangeWorld(timePassedSinceLastLoop);
    Render();
}

现在想象一下,在游戏中的东西冷却时间。 玩家按下“A”,一些很酷的动作发生了,虽然他可以按下“A”再次,什么都不会发生在接下来的5秒。 但是这场比赛仍然运行并做了所有可能发生的游戏中其他的事情。 这不是一个传统的计时器。 这是一个变量,让我们把它叫做ActionCooldown ,而一旦玩家触发动作,它设置为5秒。 每当世界变化中,timePassed是从数量,直到它的零减去。 一直以来,在游戏运行和处理输入和渲染。 但只有一次ActionCooldown降为零,另一个按“A”将再次触发该动作。



文章来源: How to make timer keep runing while loop wait for another time result?
标签: c# timer