Acción de Pygame cuando el mouse ‘click’ en .rect?

He estado escribiendo una función de prueba para aprender cómo una acción de ‘clic’ del mouse en un pygame.rect resultará en una respuesta.

Hasta aquí:

def test(): pygame.init() screen = pygame.display.set_mode((770,430)) pygame.mouse.set_visible(1) background = pygame.Surface(screen.get_size()) background = background.convert() background.fill((250,250,250)) screen.blit(background, (0,0)) pygame.display.flip() ## set-up screen in these lines above ## button = pygame.image.load('Pictures/cards/stand.png').convert_alpha() screen.blit(button,(300,200)) pygame.display.flip() ## does button need to be 'pygame.sprite.Sprite for this? ## ## I use 'get_rect() ## button = button.get_rect() ## loop to check for mouse action and its position ## while True: for event in pygame.event.get(): if event.type == pygame.mouse.get_pressed(): ## if mouse is pressed get position of cursor ## pos = pygame.mouse.get_pos() ## check if cursor is on button ## if button.collidepoint(pos): ## exit ## return 

Me he encontrado con páginas en google donde la gente está usando o se me recomienda usar una clase pygame.sprite.Sprite para las imágenes y creo que de ahí es de donde viene mi problema. He comprobado los documentos de pygames y no hay mucha cohesión entre los métodos, imho. Obviamente me estoy perdiendo algo simple pero, pensé que get_rect haría que una imagen en pygames pudiera comprobar si la posición del mouse está sobre ella cuando se presiona.

Edición: ¿Estoy pensando que necesito llamar al método pygame.sprite.Sprite para hacer que las imágenes / rects sean interactivas?

    Bueno, si alguien está interesado o tiene un problema similar, esto es lo que necesitaba cambiar.

    En primer lugar, retire:

     button = button.get_rect() 

    Entonces:

     screen.blit(button, (300, 200)) 

    Debiera ser:

     b = screen.blit(button, (300, 200)) 

    Esto crea un Rect del área donde se encuentra el botón en la pantalla.

    A

     if event.type == pygame.mouse.get_pressed() 

    Me cambié a

     if event.type == pygame.MOUSEBUTTONDOWN and event.button == 1: 

    pygame.mouse.get_pressed() obtiene el estado de los tres botones del mouse (MOUSEBUTTONDOWN, MOUSEBUTTONUP o MOUSEMOTION). También necesitaba agregar el event.button == 1 para especificar que este era el botón de ‘mouse izquierdo’ que se presionaba.

    Finalmente:

     `if button.collidepoint(pos):` 

    a:

     `if b.collidepoint(pos):` 

    Usando el método colidepunto de Rect b

    Creo que el método correcto llama a collidepoint, no a colisión * r * punto. Aquí está el enlace a la documentación!