Domanda

Qual è il modo canonico di rendere il vostro sprite rispondono ai clic del mouse in PyGame?

Ecco qualcosa di semplice, a mio ciclo di eventi:

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())

Alcune domande su di esso:

  1. E 'questo il miglior modo di rispondere ai clic del mouse?
  2. Che cosa succede se il mouse rimane premuto sullo sprite per qualche tempo? Come faccio a fare un singolo evento fuori di esso?
  3. E 'questo un modo ragionevole per informare tutti i miei sprite del click?

Grazie in anticipo

È stato utile?

Soluzione

Io di solito dare il mio cliccabile oggetti una funzione di scatto, come nel tuo esempio. Ho messo tutti questi oggetti in un elenco, per una facile iterazione quando le funzioni di clic devono essere chiamati.

durante il controllo per il quale mousebutton si preme, utilizzare la proprietà del pulsante della manifestazione.

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)

direi che questo è il metodo consigliato di farlo. Il click registra solo una volta, quindi non ci vorrà raccontare la tua sprite se l'utente sta "trascinando" con un pulsante. Questo può essere fatto facilmente con un valore booleano che è impostata su true con l'evento MOUSEBUTTONDOWN, e falso con il MOUSEBUTTONUP. L'hanno oggetti "trascinabili" iterato per attivare le loro funzioni ... e così via.

Tuttavia, se non si desidera utilizzare un gestore di eventi, è possibile lasciare che un controllo di funzione di aggiornamento per l'input con:

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

Questa è una cattiva idea per i grandi progetti, dal momento che può creare difficile trovare bug. Meglio solo mantenendo gli eventi in un unico luogo. giochi più piccoli, come semplici giochi arcade potrebbe avere più senso utilizzando lo stile di sondaggio però.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top