Pygame_Klick

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Neo_Junior
User
Beiträge: 49
Registriert: Samstag 6. August 2011, 18:52

hey,
ich hab gesehn, dass hier schön diskutiert wird also meine frage:

ich hab 16 instanzen meiner klasse die alle gleiche rechtecke sind und möchte gern einen codeschnipsel oder tipp, wie ich ein ereignis bekomme, wenn man egalwo aber eben auf einem bestimmten rechteck einen klick bekommt weil es soll memory werdn für meine großeltern un da muss man wisssn welches rechteck das war um es dann umdrehen zu können.

thx im vorraus schonma :D

PS.: bitte machts verständlich und nachvollziehbar xD
Auf den Wunsch, Computer und Software zu verstehen folgt mit (nicht unbedingt kompletter Logik) der Drang nach Wissen im Programmieren.
Xynon1
User
Beiträge: 1267
Registriert: Mittwoch 15. September 2010, 14:22

Solange die Rechtecke sich nicht überlappen ist das einfach. Siehe dir zunächst die Methode collidepoint an und dann übergib an diese einfach die Koordinaten vom Klick-Event. Werte das Ergebnis aus und fertig.
Traue keinem Computer, den du nicht aus dem Fenster werfen kannst.
Xynon auf GitHub
Neo_Junior
User
Beiträge: 49
Registriert: Samstag 6. August 2011, 18:52

äh könntest du das ma zeign? ich würd gern die koos vom rechteck eingeben können (am besten wäre was was sich auf die ganzen rechtecke also die class oder sprite bezieht) und dann eine reaktion schreibn könn die bei dem rechteck passiert, das angeklickt wurde
pls send ma nen beispielcode


so hab ma probiert ,weis aba nich wie du das gemeint hast: ich hab ma das ende vom skrip rausgesucht mit der ereignisschleife da müsste das ja rein oder?

Code: Alles auswählen

while 1:                                                                  
    for ereignis in pygame.event.get():                                   
        if ereignis.type == pygame.QUIT:                                  
            sys.exit()                                             #das hatte ich schon
        elif ereignis.type == Rect.collidepoint(0,0):   #so? das erste rechteck hat topleft- und auch normalen koordinaten (0,0)
            pygame.draw.rect(screen, [0,0,0], [0,0,85,130],0)
Auf den Wunsch, Computer und Software zu verstehen folgt mit (nicht unbedingt kompletter Logik) der Drang nach Wissen im Programmieren.
Neo_Junior
User
Beiträge: 49
Registriert: Samstag 6. August 2011, 18:52

ey kommt pls helft mir ma alle
Auf den Wunsch, Computer und Software zu verstehen folgt mit (nicht unbedingt kompletter Logik) der Drang nach Wissen im Programmieren.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Am besten fängst du noch einmal mit den Grundlagen an: deutsche Rechtschreibung und Grammatik.
Das Leben ist wie ein Tennisball.
deets

Danach: korrektes zitieren von Reimen aus beliebten Kindersendungen in der Signatur

SCNR
Newcomer
User
Beiträge: 131
Registriert: Sonntag 15. Mai 2011, 20:41

So:

Code: Alles auswählen

class Rechteck(pygame.sprite.Sprite): # Muss nicht vererbt werden, wenn du nicht mit sprites arbteitest
    def __init__(self):
        pygame.sprite.Sprite.__init__(self)
        ...
        # Rect der Klasse definieren, durch self.bild.get_rect() oder halt zeichnen
    def update(self,events):
        for event in events:
            if event.type == MOUSEBUTTONDOWN:
                if self.rect.collidepoint(event.pos):
                    self.umdrehen()


    def umdrehen(self):
        ...

...
        
http://pygame.org/docs/ref/rect.html#Rect.collidepoint
Neo_Junior
User
Beiträge: 49
Registriert: Samstag 6. August 2011, 18:52

deets hat geschrieben:Danach: korrektes zitieren von Reimen aus beliebten Kindersendungen in der Signatur

SCNR
ey alter ich weis wie das richtig heißt okay?
Auf den Wunsch, Computer und Software zu verstehen folgt mit (nicht unbedingt kompletter Logik) der Drang nach Wissen im Programmieren.
Neo_Junior
User
Beiträge: 49
Registriert: Samstag 6. August 2011, 18:52

danke newcomer
aber ich hätte die events lieber so in der schleife gelassen net so als funktion, kannst du mir das dafür ma pls schreibn?
ich steh nä(H!)mlich grad voll auf dem schlauch also möglichst mit vielen kommentaren
und das pos was is das? (klar die position aba als variable oder als platzhalter in deiner ausführung? und eine position als nur ein attribut? sin doch mehrere zahlen?????????????)
Auf den Wunsch, Computer und Software zu verstehen folgt mit (nicht unbedingt kompletter Logik) der Drang nach Wissen im Programmieren.
Newcomer
User
Beiträge: 131
Registriert: Sonntag 15. Mai 2011, 20:41

Also das event.pos ist die position des mauszeigers. Wenn du nun mit collidepoint prüfst ob die position des mauszeigers bei drücken auf der Memory karte liegt, nimmst du: if self.rect.collidepoint(event.pos): return bool. das ist es eigentlich schon. Dann instanzierst du deine rechteck objekte und fügst sie zu einem objekt von der klasse pygame.sprite.Group() hinzu. Durch aufruf der update_methode des group-objektes, werden gleichzeitig bei allen objekten in dieser gruppe, die update methode aufgerufen. Jetzt musst du nur noch dem group-objekt die events als argument übergeben und du hast es. Die event-schleife findet dann halt in der Rechteck Klasse statt, das ist zwar nicht schön aber was anderes fällt mir grad nicht ein (-;
Neo_Junior
User
Beiträge: 49
Registriert: Samstag 6. August 2011, 18:52

echt cool, danke
ein letzes noch: kannst du mir return bool erklören? is das nur n platzhalter und ich kann einfügen was ich will? oder is das wichtig un hat ne bestimmte funktion?
Auf den Wunsch, Computer und Software zu verstehen folgt mit (nicht unbedingt kompletter Logik) der Drang nach Wissen im Programmieren.
BlackJack

@Neo_Junior: Wo steht denn das? Meinst Du etwa das in der PyGame-Dokumentation? Das sagt Dir was für einen Typ die Funktion als Ergebnis zurück gibt.
Neo_Junior
User
Beiträge: 49
Registriert: Samstag 6. August 2011, 18:52

thx

...und was für ein typ ist "bool"?
Auf den Wunsch, Computer und Software zu verstehen folgt mit (nicht unbedingt kompletter Logik) der Drang nach Wissen im Programmieren.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Neo_Junior hat geschrieben:thx

...und was für ein typ ist "bool"?
Tipp den doch einfach mal in eine Shell ein ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Neo_Junior
User
Beiträge: 49
Registriert: Samstag 6. August 2011, 18:52

was denn ich kann ja net schreiben:
"sag ma was is bool?"
Auf den Wunsch, Computer und Software zu verstehen folgt mit (nicht unbedingt kompletter Logik) der Drang nach Wissen im Programmieren.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

*seufz*... ich meinte schon exakt das Wort!
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Neo_Junior
User
Beiträge: 49
Registriert: Samstag 6. August 2011, 18:52

selber *seufz*^^
mit

Code: Alles auswählen

<type 'bool'>
kann ich ja net viel anfangen
"Ich bin so schlau als wie zuvor"(oder so änlich)
Goethe
Auf den Wunsch, Computer und Software zu verstehen folgt mit (nicht unbedingt kompletter Logik) der Drang nach Wissen im Programmieren.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Neo_Junior hat geschrieben:selber *seufz*^^
mit

Code: Alles auswählen

<type 'bool'>
kann ich ja net viel anfangen
"Ich bin so schlau als wie zuvor"(oder so änlich)
Goethe
Nein, Du siehst, dass ``bool`` bereits ein Typ ist!

Wenn Du wissen willst, welche Werte der Typ umfasst, kannst Du ja mal ein ``help(bool)`` eintippern oder einen Blick in die Doku werfen ;-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Neo_Junior
User
Beiträge: 49
Registriert: Samstag 6. August 2011, 18:52

heist das, ich muss mit "if bool==true"
daran anknüpfen?
Auf den Wunsch, Computer und Software zu verstehen folgt mit (nicht unbedingt kompletter Logik) der Drang nach Wissen im Programmieren.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Neo_Junior hat geschrieben:heist das, ich muss mit "if bool==true"
daran anknüpfen?
Nein. Du bekommst einen Wahrheitswert (Typ == bool) zurück und kannst entsprechend den Wert (``True`` oder ``false``) testen. Du musst den Typen aber nicht explizit vergleichen:

Code: Alles auswählen

# schlecht
if name == True:
    # tue etwas
# besser
if name:
    # tue etwas
Willst Du auf ``False`` testen, setzt Du ein ``not`` davor :-)
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Antworten