Bonjour, dans la poursuite de mon apprentissage python, je développe un mini-jeu. Dans ce dernier j'ai besoin que l'utilisateur clique sur une image (clé) afin que celle ci disparaisse (elle ira dans un inventaire). Pour ce faire, j'ai créer une classe Controls afin de me facilité la tache. Cependant, quand je clique sur la clé elle ne disparait pas.
je vous donne d'abord la classe Controls
import pygame
from pygame.locals import *
class Controls:
def __init__(self):
"""initialisation"""
self.pressed = 0
def mouse_leftclic(self):
for event in pygame.event.get():
self.pressed = pygame.mouse.get_pressed()
if self.pressed[0]:
print('clic')
return True
else:
return False
def mouse_pos(self):
for event in pygame.event.get():
if pygame.mouse.get_focused():
return pygame.mouse.get_pos()
puis le fichier principal où j'ai démarré le projet :
import pygame, time
from pygame.locals import *
from ScreenTitleClass import *
from MessagesClass import *
from ControlsClass import *
from ColliderClass import *
from constants import *
#Dialogues et texte afficher à l'écran
from Messages import *
# On initialise Pygame
pygame.init()
# On fixe l'horloge pour gérer les fps
clock = pygame.time.Clock()
# On créer la fenêtre de jeu principal
window = pygame.display.set_mode((WINDOW_W,WINDOW_H))
pygame.display.set_caption(TITLE)
# On affiche le nombre de fps
pygame.font.init()
# On permet la répition d'une action lorsque la touche donnée reste appuyer
pygame.key.set_repeat(200, 100)
game = ScreenTitle(window)
fps = pygame.time.Clock()
#On créer les variables nécessaire au jeu
controls = Controls()# On créer la variable controls qui contient le contenu de la classe ControlsClass
msg = Messages() # Variable de messages
collider = Collider() # Gestion des collisions
closeDial = False
item = False
rootGame = True
# Boucle principal de l'application. Tant qu'elle reste ouverte, le jeu ne se ferme pas
while rootGame:
screenTitle = True
# Boucle de l'ecran titre, tant que cette boucle est ouverte, le jeu affiche l'écran titre.
while screenTitle:
if game.load() == False:
screenTitle = False
pygame.display.flip()
game = True
# Boucle du jeu. Tant que la boucle reste ouverte, le jeu est lancer. si elle se ferme, alors on quitte la boucle et reviens à la boucle principale.
while game:
pygame.display.set_caption('FPS: ' + str(clock.get_fps()))
for event in pygame.event.get():
if event.type == QUIT:
game = False
#---------------------------------------------------
#
# PREMIERE MAP
#
#---------------------------------------------------
map01 = pygame.image.load('maps/01.bmp').convert()
window.blit(map01, (0,0))
# On vérifie que l'on a bien fais un clic gauche
if item:
key = pygame.image.load('ressources/key01.png').convert_alpha()
keypos = key.get_rect()
keypos.center = 520,520
window.blit(key, keypos)
if collider.detect(keypos):
print('on touche la clé !')
if controls.mouse_leftclic():
print('la clé disparait')
else:
if closeDial == False:
msg.message("""Le but est simple petit padawan... T'échapper de la tour infernal.""", window)
else:
item = True
if controls.mouse_leftclic():
closeDial = True
pygame.display.flip()
#clock.tick(60)
je précise que la collision fonctionne et que la clé est bien détecter (la classe Collider au besoin)
import pygame
from pygame.locals import *
class Collider:
def __init__(self):
"""initialisation"""
def detect(self,object_rect):
"""On va chercher à savoir si une collision se fait entre l'objet et la souris"""
for event in pygame.event.get():
if pygame.mouse.get_focused():
x,y = pygame.mouse.get_pos()
collide = object_rect.collidepoint(x,y)
if collide:
return True
else:
return False
- Edité par MrToine63 14 septembre 2017 à 16:56:27
En fait je pense que tu n'as plus globalement pas compris le fonctionnement des évenement pygame:
quand tu fais for event in pygame.event.get() tu parcours une liste qui contient des objets évenement. Ces objet possèdent un attribut type et d'autre attribut en fonction du type:
for event in pygame.event.get()
if event.type == MOUSEBUTTONDOWN: #récupération des évenements lié à un clic de souris
if event.button == 1: # parmis ceux précédent je prend le clic gauche
elif event.button == 2: # parmis ceux précédent je prend le clic droit
et ainsi de suite pour chaque type d'event je te conseille de faire le tuto de ce même site sur pygame
Détéction du clic gauche
× 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.