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.