Bonjour, dans le cadre d'un projet en cours je créé un jeu vidéo (petit bien évidemment). J'utilise pygame et vient un moment où j'ai besoin que mon personnage puisse attaquer les ennemis. Mon problème est donc que j'aimerais que les ennemis continuent de suivre mon personnage donc que la boucle principale continue mais qu'en même temps, une autre boucle fasse l'animation d'attaque de mon personnage. J'ai essayé plusieurs trucs mais sans résultats. J'ai aussi regardé ce que je pouvais faire avec les threads mais le problème étant qu'ils bloquent le programme principal (et mettre celui-ci en thread ne serait pas très pratique je pense)
Voici un partie du main :
while launcher:
for event in pygame.event.get():
if event.type == pygame.KEYDOWN: # Detection si le joueur reste appuyé sur une touche
if event.key == pygame.K_ESCAPE: # pouvoir sortir du programme
launcher = False
elif event.key == pygame.K_x:
game.link.attaque(frame)
else:
game.appuyer[event.key] = True
elif event.type == pygame.KEYUP: # Detection si le joueur lache la touche
game.appuyer[event.key] = False
if game.appuyer.get(pygame.K_RIGHT): # Touche droite
game.link.deplacement_droite(frame)
if game.appuyer.get(pygame.K_LEFT): # Touche gauche
game.link.deplacement_gauche(frame)
if game.appuyer.get(pygame.K_UP): # Touche haut
game.link.deplacement_haut(frame)
if game.appuyer.get(pygame.K_DOWN): # Touche bas
game.link.deplacement_bas(frame)
clock += 1
if clock > nextframe:
frame = (frame+1)%8 # permet de modifier les sprites de link pendant son mouvement
nextframe += 3
screen.blit(maison, ((size[0]-(size[1]*950//650))//2, 0)) # afficher l'arrière plan
screen.blit(game.link.image, game.link.rect) # afficher link
game.tout_les_monstres.draw(screen) # afficher les monstres
screen.blit(feuillage, (382, 155))
screen.blit(feuillage, (875, 155))
for monstre in game.tout_les_monstres:
monstre.trajectoire(game.link.rect.x, game.link.rect.y, frame)
pied_gauc = pygame.Rect(game.link.rect.x+7, game.link.rect.y+40, 15, 9)
pied_droi = pygame.Rect(game.link.rect.x+11, game.link.rect.y+40, 19, 9)
pied_haut = pygame.Rect(game.link.rect.x+11, game.link.rect.y+36, 15, 9)
pied_bass = pygame.Rect(game.link.rect.x+11, game.link.rect.y+40, 15, 13)
for objet in collision:
if pied_gauc.colliderect(objet):
game.link.rect.x += game.link.vitesse
if pied_droi.colliderect(objet):
game.link.rect.x -= game.link.vitesse
if pied_haut.colliderect(objet):
game.link.rect.y += game.link.vitesse
if pied_bass.colliderect(objet):
game.link.rect.y -= game.link.vitesse
pygame.display.flip() # Mettre à jour l'image
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.