0
votes

Pygame: Comment attendre une certaine quantité de temps pour faire quelque chose après une méthode appelée

J'ai commencé à apprendre Python environ 6 semaines et a commencé à jouer avec Pygame il y a environ 2 semaines. Je travaille à travers un bon livre (parcours de Python Crash) et pour un exercice, je fais un jeu simple.

sur le côté gauche de l'écran, j'ai une photo d'un arc et d'une flèche, qui peut être déplacé de haut en bas et de «tir» en appuyant sur la barre d'espace. Lorsque la flèche est tournée, l'image passe à une arc non dessinée sans la flèche, il semble donc que la chaîne de l'arc a été libérée. P>

J'ai tout de travail jusqu'à présent. Ce que je veux, c'est que l'arc soit rechargé un certain temps après la cuisson de la flèche. Donc, le joueur appuie sur l'espace, la flèche est tournée, puis une seconde ou plus tard, l'arc est rechargé et le joueur peut tirer à nouveau. P>

en particulier, après la méthode Fire_Bow (), après 2 secondes je veux que le drapeau du bow_daway soit remis à true. p>

Est-ce que quelqu'un sait comment je pourrais faire cela? J'ai lu la documentation mais je n'arrive pas à trouver quoi que ce soit qui me donnerait l'effet désiré. En particulier, je ne veux pas mettre en pause le programme. Idéalement, j'imaginais une méthode qui dit "attendre 1 seconde". P>

Voici mon code jusqu'à présent si cela serait utile. P>

class Settings:
    """ A class to store all settings for Target Practise """

    def __init__(self):
        """ Initialise the game's settings. """
        # Screen Settings
        self.screen_width = 1200
        self.screen_height = 800
        self.bg_colour = (255, 255, 255)

        # Bow Settings
        self.bow_speed = 1


1 commentaires

Sommeil 2 ? ............


3 Réponses :


0
votes

Si vous ne voulez pas mettre en pause le seul fil que vous utilisez. Vous devriez probablement utiliser le filetage.

retards de python

Essayez quelque chose comme Ceci: xxx


0 commentaires

0
votes

Vous devez ajouter une variable de minuterie. Ceci est simplement et entier qui compte à partir d'un certain nombre après votre libération de l'arc. Lorsque la variable de la minuterie atteint 0, vous savez que vous sachez à nouveau pour permettre de tirer à nouveau.

Ajoutez cela à la fonction init: xxx

puis modifier la fonction Fire_bow To this: < / p> xxx

ajoutez enfin cette ligne à la fin de la fonction BlitME: xxx

Vous pouvez faire "auto.bow_fire_wait" plus grande augmenter le temps d'attente entre les tirs. La valeur de là représente le nombre de cadres à attendre. Donc, si vous faites 60 fps, self.bow_fire_wait = 60 attendra 1 seconde.


0 commentaires

1
votes

Je recommanderais d'utiliser pygame.time.set_timer () code> et de la mécanique de l'événement Pygames. Les docs de ce fait sont ici .

J'ai une réponse à une question similaire ici , mais Inclure suffisamment d'informations ici pour aider à cette situation spécifique. P>

Vous définissez une minuterie expirer après une certaine période. Quand cela fait, cela déclenche un événement que vous pouvez rechercher dans votre boucle d'événement. Cela vous permet de l'ajouter à votre mécanique d'événement existant assez simplement. P>

Après avoir tiré le cochon, vous ajouteriez ceci et il démarre une minuterie qui déclenchera un événement après 2 secondes se sont écoulées: P> xxx pré>

attraper cela, dans votre boucle d'événement à l'intérieur _check_events () code> vous auriez quelque chose comme: p>

class Bow:
    ...
    def pull_bow(self):
        self.bow_drawn = True


0 commentaires