如何使定时器保持运行,而循环等待另一个时间结果
本文关键字:等待 循环 另一个 时间 结果 定时器 何使 运行 | 更新日期: 2023-09-27 18:13:57
我有以下问题在我的代码,我让这个循环在计时器上运行(这只是在大计时器上运行的循环的一小部分),
里面的大计时器(滴答每1秒),我有一个方法,需要等待5秒,然后继续与循环代码的其余部分,但我希望它不会卡住代码和计时器将继续运行每1秒,不会等待这5秒。
我做了什么我添加了一个新的计时器(timer_deva),滴答每5秒,并做了所有的检查里面,然后计时器停止。
所以我的问题是,我需要等待5秒检索值来完成我的代码,但我需要我的主计时器将保持同时运行,当他得到他的结果为另一个时间,他将需要完成他留下的代码。
thanks in advance,
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);
}
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"将再次触发该动作。