Предполагается, что это простая игра, в которой вы теряете 1 жизнь каждый раз, когда принимаете больше, чем время, разрешенное для каждого вопроса, на который вы отвечаете. Я искал код для настройки своего таймера, нашел несколько способов сделать это и в итоге использовал тот, который приведен ниже.Таймер тикает два раза в секунду, а затем трижды, когда я его повторно использую (я никогда не меняю интервал).
Сначала я заметил timer_Tick() пробегов дважды каждую секунду, а не только один раз. Поэтому мне пришлось увеличить ElapsedTime по 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.
}
}
Каждый раз, когда вы запускаете таймер, вы добавляете дополнительное событие по этой строке: 'timer.Tick + = timer_Tick;', поэтому в первый раз, когда он будет работать нормально, во второй раз, когда вы вызываете метод, у вас будет два подписанных события и и так далее - я полагаю, это проблема. Укажите событие и интервал только при создании таймера. – Romasz
Что происходит, когда вы отлаживаете код ... – MethodMan
@Romasz Я довольно новичок в C#, но я вижу, что вы, вероятно, правы, я сейчас попытаюсь его исправить. Благодарю. –