Programation en pygame
bampaf -
Bonjour, je travaille sur un projet pygame, dans mon projet je controle un personnage qui quand il touche un cadeau, le cadeau disparait. J'ai aussi créer une liste avec le rectangle (hitbox) de l'image du cadeau je voudrais que quand le perso touche le cadeau celui-ci disparait de la liste et le jeux se ferme. J'ai coder ce que je veut faire tout en bas mais rien ne se passe.
#Chapitre Pygame import pygame,sys from pygame.locals import * import random #Initialisation et création de la fenêtre pygame.init() #Appel de la méthode fenetre=pygame.display.set_mode((630,480)) #Création de l'objet fenetre pygame.display.set_caption("PereNoel") #Chargement des images fond=pygame.image.load("noel.jpg") perenoel=pygame.image.load("perenoel.jpg") cadeau=pygame.image.load("cadeau.jpg") fond=pygame.transform.scale(fond, (630, 480)) perenoel=pygame.transform.scale(perenoel, (30, 30)) cadeau=pygame.transform.scale(cadeau, (30, 30)) #Création des rectangles rect_perenoel=perenoel.get_rect() rect_cadeau=cadeau.get_rect() #Initialisation des positions rect_perenoel.x=315 rect_perenoel.y=240 x=random.randint(0,630) y=random.randint(0,480) rect_cadeau.x=x rect_cadeau.y=y #Affichage des images def affichage(): fenetre.blit(fond,(0,0)) fenetre.blit(perenoel,rect_perenoel) fenetre.blit(cadeau,rect_cadeau) pygame.display.update() affichage() #Boucle infinie: Détection des événements au clavier et action pygame.key.set_repeat(500,30) # Permet de rester appuyer sur une touche et de continuer a avancer while True: for evenement in pygame.event.get(): if evenement.type==QUIT: pygame.quit() sys.exit() if evenement.type==KEYDOWN: if evenement.key==K_UP: rect_perenoel.y=rect_perenoel.y-30 if rect_perenoel.top<0: #si le bord haut de l'image sort du cadre on remet l'image en bas rect_perenoel.bottom=480 affichage() if evenement.type==KEYDOWN: if evenement.key==K_DOWN: rect_perenoel.y=rect_perenoel.y+30 if rect_perenoel.bottom>480: #si le bord bas de l'image sort du cadre on remet l'image en haut rect_perenoel.top=0 affichage() if evenement.type==KEYDOWN: if evenement.key==K_RIGHT: rect_perenoel.x=rect_perenoel.x+30 if rect_perenoel.right>630: #si le bord droit de l'image sort du cadre on remet l'image à gauche rect_perenoel.left=0 affichage() if evenement.type==KEYDOWN: if evenement.key==K_LEFT: rect_perenoel.x=rect_perenoel.x-30 if rect_perenoel.left<0: #si le bord gauche de l'image sort du cadre on remet l'image à droite rect_perenoel.right=630 affichage() if rect_perenoel.colliderect(rect_cadeau)==True: rect_cadeau.x=rect_cadeau.x+1000 listecadeau=[rect_cadeau] if rect_perenoel.collidelist(listecadeau)==rect_cadeau: listecadeau.remove(rect_cadeau) if listecadeau==[]: evenement.type==QUIT
- Collidelist pygame
- Modulenotfounderror: no module named 'pygame' ✓ - Forum Python
- Pygame importer une police d'écriture ✓ - Forum Python
1 réponse
Bonsoir, il faut toujours ne faire qu'un update de la fenêtre, et tant qu'à faire regroupe ce qui peut l'être dans tes conditions, regarde dans ta boucle les modifications faites.
running = True while running: for evenement in pygame.event.get(): if evenement.type == QUIT: running = False break if evenement.type == KEYDOWN: if evenement.key == K_UP: rect_perenoel.y -= 30 # si le bord haut de l'image sort du cadre on remet l'image en bas if rect_perenoel.top < 0: rect_perenoel.bottom = 480 elif evenement.key == K_DOWN: rect_perenoel.y += 30 # si le bord bas de l'image sort du cadre on remet l'image en haut if rect_perenoel.bottom > 480: rect_perenoel.top = 0 if evenement.key == K_RIGHT: rect_perenoel.x += 30 # si le bord droit de l'image sort du cadre on remet l'image à gauche if rect_perenoel.right > 630: rect_perenoel.left = 0 elif evenement.key == K_LEFT: rect_perenoel.x -= 30 # si le bord gauche de l'image sort du cadre on remet l'image à droite if rect_perenoel.left < 0: rect_perenoel.right = 630 # POURQUOI DÉPLACER LE CADEAU HORS VISIBILITÉ PLUTÔT QUE DE NE # PLUS L'AFFICHER ? if rect_perenoel.colliderect(rect_cadeau): print('Collision !') rect_cadeau.x += 1000 ''' # POURQUOI CETTE LISTE ? POUR ENSUITE LA VIDER listecadeau = [rect_cadeau] if rect_perenoel.collidelist(listecadeau) == rect_cadeau: listecadeau.remove(rect_cadeau) if listecadeau == []: evenement.type == QUIT # CELA N'A PAS DE SENS DE DÉFINIR CETTE VARIABLE ''' affichage()
Tu devrais aussi regarder du côté des sprites pygame qi permet de grouper image et rect, il n'y a pas besoin de maîtriser le modèle objet pour s'en servir.
Normalement ta collision devrait être détectée.