Question

Je travaille sur un projet de jeu laser tag qui utilise pygame et Raspberry Pi.Dans le jeu, j'ai besoin d'une minuterie d'arrière-plan pour suivre le temps de jeu.Actuellement, j'utilise ce qui suit pour ce faire, mais cela ne semble pas fonctionner correctement :

pygame.timer.get_ticks()

Mon deuxième problème est de réinitialiser ce timer au redémarrage du jeu.Le jeu devrait redémarrer sans avoir à redémarrer le programme et cela ne se fera probablement qu'en réinitialisant le chronomètre, je suppose.

Ce dont j'ai besoin, en bref, c'est d'avoir une variable de minuterie en arrière-plan et de pouvoir la réinitialiser à tout moment dans une boucle while.

Je suis un vrai débutant en python et pygame, mais la solution de ce problème donnera un grand coup de pouce à mes connaissances et à l'avancement du projet.Toute aide sera grandement appréciée.

Était-ce utile?

La solution

Vous n'avez pas nécessairement besoin de Pygame pour cela -- time.time() devrait fonctionner aussi bien que pygame.time.get_ticks(), bien qu'il indique les secondes depuis l'époque Unix au lieu des millisecondes depuis l'initialisation de Pygame.

Vous souhaitez mesurer le temps écoulé depuis la dernière réinitialisation (ou depuis le début du jeu, ce que vous pouvez considérer comme la première réinitialisation).Les deux fonctions dont vous disposez renvoient toutes deux le temps écoulé depuis un point de référence arbitraire.Le moyen le plus simple d'y parvenir est de conserver une variable t0.Cette variable conservera la valeur du temps lors de la dernière réinitialisation (ou début du jeu).

Voici un exemple qui boucle à l'infini et imprime constamment la valeur d'une telle minuterie, en la réinitialisant chaque fois qu'elle atteint 3 secondes :

# import the builtin time module, this is always available
import time

# initialize the t0 variable, "starting the stopwatch"
t0 = time.time()

while True:
  # calculate the time since some reference point (here the Unix Epoch)
  t1 = time.time()

  # calculate the difference, i.e. the time elapsed
  dt = t1 - t0

  if dt >= 3:
    print "Three seconds reached, resetting timer"
    t0 = t1
  else:
    print "Time elapsed is", dt, "seconds"

Si vous souhaitez découvrir les fonctionnalités orientées objet de Python, c'est une bonne opportunité pour un exercice.Le comportement ci-dessus peut être parfaitement résumé dans un Stopwatch classe, par ex.avec get_seconds() et reset() méthodes.

Si vous écrivez une telle classe, votre code logique de timing de haut niveau peut être très simple et lisible :

my_timer = Stopwatch()
print my_timer.get_seconds(), "seconds have elapsed since start/reset"
my_timer.reset()

Les détails de l'implémentation sous-jacente sont cachés dans le code du Stopwatch classe.

Autres conseils

Après que pygame.init() est appelé, la minuterie pygame commence. Supposons donc que vous exécutez votre programme une fois, commencez à effectuer différentes sessions de jeux dans la même exécution, vous pouvez utiliser une variable de référence pour suivre la trace de la minuterie et la réinitialiser.
Exemple:

#your game
import pygame
from pygame import time as T
#do your stuffs
pygame.init()
while True: #this loop never ends and you want to reset timer in this loop if I am not wrong.
    if(new_session):
        tim_var=T.get_ticks()
        new_session=0

    #do your stuffs
    print 'time elaspsed in this session upto now '+str(T.get_ticks()-tim_var)+' millisecs'

    if(game_ended):
        new_session=1
        #restart_your_new_game by resetting your variables or whatever

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top