这应该是一个简单的游戏,每次你花费超过你回答的每个问题所允许的时间,你就会失去1点生命。我已经搜索了一个代码来设置我的计时器,找到了多种方法来完成它并最终使用下面的方法。
起初我注意到 timer_Tick()每秒运行两次而不是一次。所以我不得不将经过时间增加 0.5f 而不是 1f 以获得正确的经过时间..它完美无缺,直到我必须重新启动计时器(当我加载一个新问题时)。当我这样做时, timer_Tick()每秒运行三次次而不是两次..这意味着秒计数器减少 1.5f 而不是每秒1f。我想知道导致这种情况的原因以及如何解决这个问题。提前谢谢。
public void Start_timer(float Interval)
{
ElapsedTime = 0f;
timer.Tick += timer_Tick;
timer.Interval = TimeSpan.FromSeconds(Interval);
bool enabled = timer.IsEnabled;
timer.Start();
}
void timer_Tick(object sender, object e)
{
ElapsedTime += 0.5f; //I had to set this to 0.5f to get the correct reading as timer_Tick runs 2 times per second..
TimeT.Text = "Time: " + Convert.ToString(QTime - ElapsedTime);
if (ElapsedTime >= QTime && Lives == 0){
timer.Stop();
AnswerTB.IsEnabled = false;
//GameOver
}
else if (ElapsedTime >= QTime && Lives != 0)
{
ElapsedTime = 0f;
Lives--;
LivesT.Text = "Lives: " + Convert.ToString(Lives);
timer.Stop();
LoadQuestion(); //This includes a Start_timer(1) call and I never change the 1 second interval.
}
}
答案 0 :(得分:1)
每次启动计时器时,您都会重新订阅Tick事件。如果您在计时器停止时未取消订阅,则最终会在每次打勾时多次触发该事件。在创建计时器事件后,只需订阅Tick事件一次,然后将其保留。所以移动线
timer.Tick += timer_Tick;
到创建计时器的代码部分。然后你应该能够在不接收多个事件的情况下停止并启动计时器。