Seite 1 von 2
Pygame_Klick
Verfasst: Samstag 6. August 2011, 18:59
von Neo_Junior
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
Re: Pygame_Klick
Verfasst: Samstag 6. August 2011, 20:35
von Xynon1
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.
Re: Pygame_Klick
Verfasst: Samstag 6. August 2011, 20:58
von Neo_Junior
ä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)
Re: Pygame_Klick
Verfasst: Donnerstag 11. August 2011, 06:17
von Neo_Junior
ey kommt pls helft mir ma alle
Re: Pygame_Klick
Verfasst: Donnerstag 11. August 2011, 07:42
von EyDu
Am besten fängst du noch einmal mit den Grundlagen an: deutsche Rechtschreibung und Grammatik.
Re: Pygame_Klick
Verfasst: Donnerstag 11. August 2011, 09:23
von deets
Danach: korrektes zitieren von Reimen aus beliebten Kindersendungen in der Signatur
SCNR
Re: Pygame_Klick
Verfasst: Donnerstag 11. August 2011, 20:54
von Newcomer
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
Re: Pygame_Klick
Verfasst: Freitag 12. August 2011, 08:09
von Neo_Junior
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?
Re: Pygame_Klick
Verfasst: Freitag 12. August 2011, 08:26
von Neo_Junior
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?????????????)
Re: Pygame_Klick
Verfasst: Freitag 12. August 2011, 20:18
von Newcomer
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 (-;
Re: Pygame_Klick
Verfasst: Montag 15. August 2011, 18:17
von Neo_Junior
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?
Re: Pygame_Klick
Verfasst: Montag 15. August 2011, 18:33
von 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.
Re: Pygame_Klick
Verfasst: Montag 15. August 2011, 18:35
von Neo_Junior
thx
...und was für ein typ ist "bool"?
Re: Pygame_Klick
Verfasst: Montag 15. August 2011, 18:42
von Hyperion
Neo_Junior hat geschrieben:thx
...und was für ein typ ist "bool"?
Tipp den doch einfach mal in eine Shell ein

Re: Pygame_Klick
Verfasst: Montag 15. August 2011, 19:01
von Neo_Junior
was denn ich kann ja net schreiben:
"sag ma was is bool?"
Re: Pygame_Klick
Verfasst: Montag 15. August 2011, 19:02
von Hyperion
*seufz*... ich meinte schon exakt das Wort!
Re: Pygame_Klick
Verfasst: Montag 15. August 2011, 19:05
von Neo_Junior
selber *seufz*^^
mit
kann ich ja net viel anfangen
"Ich bin so schlau als wie zuvor"(oder so änlich)
Goethe
Re: Pygame_Klick
Verfasst: Montag 15. August 2011, 19:14
von Hyperion
Neo_Junior hat geschrieben:selber *seufz*^^
mit
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

Re: Pygame_Klick
Verfasst: Montag 15. August 2011, 19:23
von Neo_Junior
heist das, ich muss mit "if bool==true"
daran anknüpfen?
Re: Pygame_Klick
Verfasst: Montag 15. August 2011, 19:43
von Hyperion
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
