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
PS.: bitte machts verständlich und nachvollziehbar xD
Pygame_Klick
-
- User
- Beiträge: 49
- Registriert: Samstag 6. August 2011, 18:52
Auf den Wunsch, Computer und Software zu verstehen folgt mit (nicht unbedingt kompletter Logik) der Drang nach Wissen im Programmieren.
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.
-
- 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?
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.
-
- 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.
Danach: korrektes zitieren von Reimen aus beliebten Kindersendungen in der Signatur
SCNR
SCNR
So:
http://pygame.org/docs/ref/rect.html#Rect.collidepoint
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):
...
...
-
- User
- Beiträge: 49
- Registriert: Samstag 6. August 2011, 18:52
ey alter ich weis wie das richtig heißt okay?deets hat geschrieben:Danach: korrektes zitieren von Reimen aus beliebten Kindersendungen in der Signatur
SCNR
Auf den Wunsch, Computer und Software zu verstehen folgt mit (nicht unbedingt kompletter Logik) der Drang nach Wissen im Programmieren.
-
- 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?????????????)
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.
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 (-;
-
- 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?
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.
@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.
-
- User
- Beiträge: 49
- Registriert: Samstag 6. August 2011, 18:52
thx
...und was für ein typ ist "bool"?
...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.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Tipp den doch einfach mal in eine Shell einNeo_Junior hat geschrieben:thx
...und was für ein typ ist "bool"?
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert
-
- User
- Beiträge: 49
- Registriert: Samstag 6. August 2011, 18:52
was denn ich kann ja net schreiben:
"sag ma was is bool?"
"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.
- 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
assert encoding_kapiert
-
- User
- Beiträge: 49
- Registriert: Samstag 6. August 2011, 18:52
selber *seufz*^^
mit
kann ich ja net viel anfangen
"Ich bin so schlau als wie zuvor"(oder so änlich)
Goethe
mit
Code: Alles auswählen
<type 'bool'>
"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.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
Nein, Du siehst, dass ``bool`` bereits ein Typ ist!Neo_Junior hat geschrieben:selber *seufz*^^
mitkann ich ja net viel anfangenCode: Alles auswählen
<type 'bool'>
"Ich bin so schlau als wie zuvor"(oder so änlich)
Goethe
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
assert encoding_kapiert
-
- User
- Beiträge: 49
- Registriert: Samstag 6. August 2011, 18:52
heist das, ich muss mit "if bool==true"
daran anknüpfen?
daran anknüpfen?
Auf den Wunsch, Computer und Software zu verstehen folgt mit (nicht unbedingt kompletter Logik) der Drang nach Wissen im Programmieren.
- Hyperion
- Moderator
- Beiträge: 7478
- Registriert: Freitag 4. August 2006, 14:56
- Wohnort: Hamburg
- Kontaktdaten:
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:Neo_Junior hat geschrieben:heist das, ich muss mit "if bool==true"
daran anknüpfen?
Code: Alles auswählen
# schlecht
if name == True:
# tue etwas
# besser
if name:
# tue etwas
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
assert encoding_kapiert