Bonjour, j'aimerais dans le but d'un projet crée un menu. Or pour cela je dois détecter lorsque l'utilisateur clique sur sa souris mais après avoir lu la documentation de pygame et mouse je ne trouve pas comment faire pour détecter clique par clique mais j'ai trouvé seulement comme détecter si le clique est enfoncé voici ma fonction qui me permet d'afficher les images et savoir si elles sont pressés :
def draw_button(surface, button_image, button_rect):
action = False
# Obtenir la position de la souris
pos = pygame.mouse.get_pos()
# Vérifier si la souris est pressée
if button_rect.collidepoint(pos):
if pygame.mouse.get_pressed()[0] == 1:
action = True
# Afficher le bouton sur l'écran
surface.blit(button_image, (button_rect.x, button_rect.y))
return action
Peut-être faudrait il utiliser MOUSEBUTTONUP et DOWN mais honnêtement j'aurais besoin qu'on m'éclaire
J'aurais besoin que ça prenne en compte clique par clique pour que lorsque j'appuie sur mon bouton volume on l'image soit remplacé par volume off. Pour ce côté ci dans ma fonction menu ça fonctionne mais j'aurais juste besoin que le clique ne doit pas être enfoncé car sinon ça me renvoie divers information booléenne et change mon image sans cesse, voici ma fonction menu pour d'autres conseils si vous avez :
# Fonction menu
def menu():
SCREEN_HEIGHT = 500
SCREEN_WIDTH = 800
screen = pygame.display.set_mode((SCREEN_WIDTH, SCREEN_HEIGHT))
start_img = pygame.image.load('assets/menu/start_btn.png').convert_alpha()
exit_img = pygame.image.load('assets/menu/exit_btn.png').convert_alpha()
option_img = pygame.image.load('assets/menu/option.png').convert_alpha()
sound_on_img = pygame.image.load('assets/menu/sound_on.png').convert_alpha()
sound_off_img = pygame.image.load('assets/menu/sound_off.png').convert_alpha()
start_button_image, start_button_rect = create_button(100, 200, start_img, 0.8)
exit_button_image, exit_button_rect = create_button(450, 200, exit_img, 0.8)
option_button_image, option_button_rect = create_button(730, 0, option_img, 0.2)
sound_button_image, sound_button_rect = create_button(12,10,sound_on_img,0.09)
sound = True
run = True
while run:
screen.fill((132,214,126))
draw_button(screen, option_button_image, option_button_rect)
if draw_button(screen, sound_button_image, sound_button_rect):
if sound:
sound_button_image, sound_button_rect = create_button(12,10,sound_off_img,0.09)
sound = False
else:
sound_button_image, sound_button_rect = create_button(12,10,sound_on_img,0.09)
sound = True
if draw_button(screen, start_button_image, start_button_rect):
main()
if draw_button(screen, exit_button_image, exit_button_rect):
run = False
for event in pygame.event.get():
if event.type == pygame.QUIT:
run = False
pygame.display.update()
pygame.quit()
tu as une boucle de gestion des événements qui débute en ligne 40, c'est dans celle-ci que tu dois détecté si tu as cliqué et ensuite regarder où le clic a été fait
for event in pygame.event.get():
if event.type == pygame.MOUSEBUTTONDOWN:
if sound_button_rect.collidepoint(pygame.mouse.get_pos()):
sound= not sound
if event.type == pygame.QUIT:
run= false
if sound:
# affichage bouton son ON
sound_button_image, sound_button_rect = create_button(12,10,sound_on_img,0.09)
else:
#affichage bouton son OFF
sound_button_image, sound_button_rect = create_button(12,10,sound_off_img,0.09)
tu as une boucle de gestion des événements qui débute en ligne 40, c'est dans celle-ci que tu dois détecté si tu as cliqué et ensuite regarder où le clic a été fait
for event in pygame.event.get():
if event.type == pygame.MOUSEBUTTONDOWN:
if sound_button_rect.collidepoint(pygame.mouse.get_pos()):
sound= not sound
if event.type == pygame.QUIT:
run= false
if sound:
# affichage bouton son ON
sound_button_image, sound_button_rect = create_button(12,10,sound_on_img,0.09)
else:
#affichage bouton son OFF
sound_button_image, sound_button_rect = create_button(12,10,sound_off_img,0.09)
Merci pour ta réponse, mais le problème n'est pas là malheureusement, si je mets dans les evenements ou non ça fonctionne tout de même. Je cherche seulement comment faire pour que se soit pris en compte clique par clique et non que se soit si mon clique est enfoncé qui est pris en compte, je sais pas si je suis assez claire mais ducoups ça serait cette partie de mon programme que j'aimerais modifier :
if pygame.mouse.get_pressed()[0] == 1:
action = True
il faut changer l'événement pris en compte, ce serait plutôt en effet pygame.MOUSEBUTTONUP qui se produit au relâchement du clic (on pourrait rajouter un "AND event.button==BUTTON_LEFT" au test pour le clic gauche).
Python c'est bon, mangez-en.