Frage

Was ist der üblicher Weg, Ihr Sprites macht auf Mausklicks in PyGame reagieren?

Hier ist etwas einfach, in meiner Ereignisschleife:

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

Einige Fragen zu diesem Thema:

  1. Ist dies der beste Weg, um Mausklicks reagieren?
  2. Was passiert, wenn die Maus auf dem Sprite für einige Zeit gedrückt bleibt? Wie mache ich ein einzelnes Ereignis aus ihm heraus?
  3. Ist das eine vernünftige Art und Weise all meine Sprites des Klicks zu benachrichtigen?

Vielen Dank im Voraus

War es hilfreich?

Lösung

Normalerweise gebe ich meine klickbare einen Klick Funktionsobjekte, wie in Ihrem Beispiel. Ich habe alle diese Objekte in einer Liste, für die einfache Iteration, wenn die Klick-Funktionen aufgerufen werden sollen.

bei der Prüfung für die Maustaste drücken Sie auf die Schaltfläche Eigenschaft des Ereignisses verwenden.

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)

Ich würde sagen, dies ist der empfohlene Weg, es zu tun. Der Klick registriert nur einmal, so dass es nicht Ihre Sprite sagen, wenn der Benutzer „Ziehen“ mit einer Taste. Das kann leicht mit einem boolean erfolgen, die auf true mit dem MOUSEBUTTONDOWN Ereignisse und falsch mit dem MOUSEBUTTONUP gesetzt. Die haben „ziehbar“ Objekte zur Aktivierung ihrer Funktionen iteriert ... und so weiter.

Wenn Sie jedoch möchten, einen Event-Handler nicht verwenden, können Sie eine Update Funktionskontrolle für die Eingabe lassen mit:

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

Dies ist eine schlechte Idee für größere Projekte, da es schwer schaffen kann Fehler zu finden. Besser nur halten Ereignisse an einem Ort. Kleinere Spiele, wie einfache Arcade-Spiele könnten zwar mehr Sinn, mit der Sondierung Stil machen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top