Проблема в приостановке / возобновлении таймера - PullRequest
4 голосов
/ 17 июля 2011

У меня есть игра-лабиринт. После того, как вы нажмете Enter, вы можете ввести чит-код, также таймер остановится. Но после ввода кода мой таймер возобновляет работу, но он уменьшается в 3 раза каждую секунду. Вот условие для нажатия Enter:

// gt.setTimer() is called at the moment the maze started
// I'm using getch to trap inputs

else if (move == 13) //Reads if Enter is pressed
            {
                pause = 1; //A Flag saying that the timer must be paused
                gt.setTimer(pause); //Calls my setTimer() method
                Console.Write("Enter Cheat: "); 
                cheat = Console.ReadLine();
                pause = 0; //A Flag saying that the timer should resume
                gt.setTimer(lives, pause); //Calls again the Timer
            }

Вот мой код setTimer ():

static System.Timers.Timer t = new System.Timers.Timer();
static int gTime = 300;

public void setTimer(int pause)
    {
        t.Interval = 1000; // Writes the time after every 1 sec
        if (pause == 1)
            t.Stop(); // Stop the timer if you press Enter
        else 
            t.Start(); // Starts the timer if not
        t.Elapsed += new ElapsedEventHandler(showTimer);                       
    }

    public static void showTimer(object source, ElapsedEventArgs e)
    {
        Console.Write("Time   " + gTime); //Writes time
        gTime--; //Decrements the time
    }

Что-то не так? Я что-то упустил?

Ответы [ 2 ]

5 голосов
/ 17 июля 2011

Проблема в последней строке метода setTimer.Обработчик таймера должен быть зарегистрирован только один раз после вызова конструктора, а не в setTimer.В случае истекшего таймера обработчик вызывается количество раз, когда он был зарегистрирован.Таким образом, чем больше вы используете оператора + = чем больше он вызывается.

2 голосов
/ 17 июля 2011

Каждый раз, когда вы делаете: t.Elapsed + = new ElapsedEventHandler (showTimer);к этому событию вы добавляете еще один обработчик события

Эта строка запускается только один раз, в пар код, где вы инициализируете таймер

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...