如何在循环等待另一个时间结果时让定时器继续运行?
我的代码中有以下问题,我在定时器上运行这个循环(这只是在大定时器上运行的循环的一小部分),
在那个大计时器内(他每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); }
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”将再次触发该动作。