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
3 Réponses :
Si vous ne voulez pas mettre en pause le seul fil que vous utilisez. Vous devriez probablement utiliser le filetage.
Essayez quelque chose comme Ceci: p>
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: p> puis modifier la fonction Fire_bow To this: < / p> ajoutez enfin cette ligne à la fin de la fonction BlitME: p> 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 code> attendra 1 seconde. P> p>
Je recommanderais d'utiliser 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 pygame.time.set_timer () code> et de la mécanique de l'événement Pygames. Les docs de ce fait sont ici .
_check_events () code> vous auriez quelque chose comme: p>
class Bow:
...
def pull_bow(self):
self.bow_drawn = True
Sommeil 2 code>? ............