2013-03-14 5 views
0

Je crée un jeu dans Winforms (C#) et j'ai fait un Timer pour avoir la trace de l'heure en cours et la minuterie s'arrête quand le jeu s'arrête. Mais je n'ai pas réussi à sauver le temps que les chronomètres montrent quand le jeu s'arrête et le poster.Enregistrer un tick spécifique

Voici comment j'ai construit la fonction minuterie.

private Timer timers; 
public event EventHandler Tick; 

StartGame() 
{ 
    ... 
    timers = new Timer(); 
    timers.Interval = 1000; 
    timers.Tick += new EventHandler(TimerTick); 
    timers.Enabled = true; 
} 

private void TimerTick(object sender, EventArgs e) 
{ 
    Time++; 
    OnTick(); 
} 

protected void OnTick() 
{ 
    if (Tick != null) 
    { 
     Tick(this, new EventArgs()); 
    }  
} 
+3

Quelle est la définition de la propriété 'Time'? –

+0

Par exemple, si j'utilise un autre winform pour enregistrer un highscore, je veux afficher l'heure ici. – Nisse

+0

Je pense que je vois ce que tu veux. Vous souhaitez probablement créer votre propre classe TickEventArgs dans laquelle vous héritez de EventArgs et ajoutez votre propriété Time à celle-ci, afin que vous puissiez transmettre cette information via l'événement. – LarsTech

Répondre

1

Ne pas utiliser une minuterie pour mesurer le temps - Timers ne sont jamais exacts, ils devraient être utilisés pour déclencher des événements, rien de plus. Surtout pas le System.Windows.Forms.Timer qui s'exécute dans le thread graphique et peut être bloqué par d'autres messages.

Selon votre question, vous voulez suivre le temps de jeu. Voici comment je le ferais:

private Stopwatch _sw = new Stopwatch(); 

public void StartOrResumeGame() { 
    _sw.Start(); 
} 
public void StopOrPauseGame() { 
    _sw.Stop(); 
    _gameTimeMessage = String.Format("You have been playing for {0} seconds.", _sw.TotalSeconds); 
} 
+0

Chronomètre se sent réellement mieux que la minuterie. Mais qu'est ce que le _gameTImeMessage? – Nisse

+0

Je supposais que vous enregistriez le temps de jeu à montrer à l'utilisateur à la fin de la partie. Prétendre que '_gameTimeMessage' est un message à l'écran ou quelque chose. – Dai

+0

Ok, je pense que je l'ai fait fonctionner maintenant. Mais j'ai quelques problèmes avec le format. Le ".TotalSeconds" ne fonctionne pas et les autres que j'ai essayés je pense montrent en millisecondes. Avez-vous des conseils comment je peux l'écrire en quelques secondes? Quand j'utilise le ".TotalSeconds" je reçois ce message d'erreur "'System.Diagnostics.Stopwatch' ne contient pas de définition pour 'TotalSeconds' et aucune méthode d'extension 'TotalSeconds' n'accepte un premier argument de type 'System.Diagnostics.Stopwatch' peut être trouvé (manque-t-il une directive using ou une référence d'assembly?) " – Nisse

Questions connexes