Question

Quelle est la manière canonique de rendre vos sprites répondre aux clics de souris dans PyGame?

Voici quelque chose de simple, dans ma boucle d'événement:

for event in pygame.event.get():
    if event.type == pygame.QUIT:
        exit_game()
    [...]
    elif (  event.type == pygame.MOUSEBUTTONDOWN and
            pygame.mouse.get_pressed()[0]):
        for sprite in sprites:
            sprite.mouse_click(pygame.mouse.get_pos())

Quelques questions à son sujet:

  1. Est-ce la meilleure façon de répondre aux clics de souris?
  2. Que faire si la souris reste enfoncé sur l'image-objet pendant un certain temps? Comment puis-je faire un événement hors de lui?
  3. Est-ce une façon raisonnable d'informer tous mes sprites du clic?

Merci d'avance

Était-ce utile?

La solution

Je donne généralement mon cliquable objets fonction de clic, comme dans votre exemple. Je mets tous ces objets dans une liste, pour l'itération facile lorsque les fonctions de clic doivent être appelés.

lors de la vérification que vous appuyez sur boutonSouris, utilisez la propriété de bouton de l'événement.

import pygame
from pygame.locals import * #This lets you use pygame's constants directly.

for event in pygame.event.get():
    if event.type == MOUSEBUTTONDOWN:  #Better to seperate to a new if statement aswell, since there's more buttons that can be clicked and makes for cleaner code.
        if event.button == 1:
            for object in clickableObjectsList:
                object.clickCheck(event.pos)

Je dirais que c'est la méthode recommandée de le faire. Le clic enregistre une seule fois, il dit coutume de l'image-objet si l'utilisateur est « traîne » avec un bouton. Cela peut se faire facilement avec un booléen qui est définie sur true avec l'événement MOUSEBUTTONDOWN, et faux avec le MOUSEBUTTONUP. Les objets ont « draggable » itéré pour activer leurs fonctions ... et ainsi de suite.

Cependant, si vous ne voulez pas utiliser un gestionnaire d'événements, vous pouvez laisser un contrôle de la fonction de mise à jour pour l'entrée avec:

pygame.mouse.get_pos() 
pygame.mouse.get_pressed().

Ceci est une mauvaise idée pour les grands projets, car il peut créer difficile de trouver des bogues. Mieux juste garder les événements dans un seul endroit. petits jeux, comme les jeux d'arcade simples pourraient faire plus de sens en utilisant le style de sondage bien.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top