Seite 1 von 1

Pygame -- Mausklick auf Objekt(oder Koordinate)

Verfasst: Montag 7. Mai 2012, 15:07
von Pyanfänger
Hallo an alle,
die Frage ist jetzt wahrscheinlich ein bisschen dumm, aber fange jetzt seit langem wieder mit Pygame an und habe daher die Hälfte vergessen :(
Wollte also Fragen wie man merken kann das ein Mausklick auf ein bestimmtes Objekt gemacht wurde also

Code: Alles auswählen

while True:
    for event in pygame.event.get():
        if event.type == pygame.MOUSEBUTTONDOWN:
aber das er eben nicht nur erkennt das ein mausklick gemacht wurde , sondern das ein mausklick auf ein bestimmtes objekt gemacht wurde.(dann soll bei mir die punktzah lvergrößert werden :D :D :D)
Iwie kriegichs net hin...


MfG Universum

PS: Habs jetzt so gemacht, aber Pygame stürtzt ständig ab:

Code: Alles auswählen

import pygame, sys, random


Punkte = 0 


pygame.init()
screen = pygame.display.set_mode([550,412])
screen.fill([255,255,255])
Objekt = pygame.image.load('Objekt.png')
Hintergrund = pygame.image.load('Explosion.jpg')
screen.blit(Hintergrund,[0,0])

for i in range(0,20):
    a = random.randint(0,350)
    b = random.randint(0,350)
    screen.blit(Objekt,[a,b])
    pygame.display.flip()
    pygame.time.delay(2000)
    screen.blit(Hintergrund,[0,0])



    



while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type == pygame.MOUSEBUTTONDOWN:
            pos1=pygame.mouse.get_pos()
            print pos1
            if pos1 == (a,b):   
                Punkte = Punkte + 1
                print Punkte 
                
            
            
            

Keine Sorge ist nur zum testen^^

Re: Pygame -- Mausklick auf Objekt(oder Koordinate)

Verfasst: Dienstag 8. Mai 2012, 11:17
von Pyanfänger
#push#

Re: Pygame -- Mausklick auf Objekt(oder Koordinate)

Verfasst: Dienstag 8. Mai 2012, 11:18
von deets
Was heisst "stuerzt ab"? Und das man auf genau *einen* punkt klickt - das ist wohl etwas viel verlangt. Schau dir mal die Rect-Klasse an.

Re: Pygame -- Mausklick auf Objekt(oder Koordinate)

Verfasst: Dienstag 8. Mai 2012, 11:19
von Hyperion
Was willst Du denn von uns hören, was Du nicht schon selber erkannt hast? Es gibt in `pygame` keine magische Funktion, die Dir ein "Objekt" unter dem Mauszeiger liefert. Das musst Du schon selber implementieren...

... Du fragst eben die aktuellen Koordinaten ab und musst dann in Deinem Modell gucken, welches Objekt sich an dieser Position verbirgt. Je nach Spiel / Logik können das ja sogar mehrere sein.

Re: Pygame -- Mausklick auf Objekt(oder Koordinate)

Verfasst: Dienstag 8. Mai 2012, 11:26
von Pyanfänger
So hab den code verändert das er die koordinaten abfragt
aber jetzt zeigt es kein bild...

Code: Alles auswählen

import pygame, sys, random


Punkte = 0 


pygame.init()
screen = pygame.display.set_mode([550,412])
screen.fill([255,255,255])
Objekt = pygame.image.load('Objekt.png')
Hintergrund = pygame.image.load('explosion.jpg')
screen.blit(Hintergrund,[0,0])






    



while True:
    
    a = random.randint(0,350)
    b = random.randint(0,350)
    for event in pygame.event.get():
        print event.type
        if event.type == pygame.QUIT:
            sys.exit()
        elif event.type ==pygame.USEREVENT:
            for i in range(0,20):

                screen.blit(Objekt,[a,b])
                pygame.display.flip()
                pygame.time.delay(2000)
                screen.blit(Hintergrund,[0,0]) 
                
        elif event.type == pygame.MOUSEBUTTONDOWN:
            pos1=pygame.mouse.get_pos()
            if pos1 == (a,b):   
                Punkte = Punkte + 1
                print Punkte  
            
        
                
            
            
            

irgendwie versteh ich meinen fehler nicht...

Re: Pygame -- Mausklick auf Objekt(oder Koordinate)

Verfasst: Dienstag 8. Mai 2012, 11:45
von BlackJack
@Pyanfänger: Dazu müsstest Du etwas auf's Screen-Surface „blitten” und dann `display.flip()` aufrufen. Schau mal wo Du das in Deinem Code stehen hast (übrigens in einer verwirrenden Reihenfolge) und nun erklär mal unter welchen Umständen der betreffende Code ausgeführt werden sollte?

Re: Pygame -- Mausklick auf Objekt(oder Koordinate)

Verfasst: Dienstag 8. Mai 2012, 11:48
von Hyperion
Du könntest einmal auf die Nachfragen / Postings von uns eingehen. Das motiviert potenzielle Helfer, weiterhin mit Dir zu interagieren. Momentan machst Du den Eindruck, als ignoriertest Du uns...

... zudem macht es keinen guten Eindruck wenn Du hier Code "reinrotzt", der total unaufgeräumt wirkt. Wieso sind da gefühlte 30 Leerzeilen in Deinem Code? Selbst wenn man die mittleren als logischen "Trenner" sehen wollte, so bleiben die sechs Stück am Ende unerklärbar.

Zudem existieren spezielle Python-Code-Tags: [ code=python ] [ /code] (ohne die Leerzeichen).

Ich denke in Deinem Code fehlt ein `flip` bzw. `update`.

Mehr kann man Dir im Moment eh nicht sagen, da wir das ganze ja nicht testen können. Du hast ja bisher nicht einmal beschrieben, was Du Dein Code überhaupt machen soll bzw. was Du generell erreichen willst.

Re: Pygame -- Mausklick auf Objekt(oder Koordinate)

Verfasst: Dienstag 8. Mai 2012, 12:02
von Pyanfänger
Ah ok :(
Also was ich damit erreichen will ist das ein Bildschirm erscheint auf dem dieses "Objekt" so und so viele male(einstellbar) auf einen zufälligen Platz des Bildschirms springt und man es schnell anklicken muss, und die punktzahl dann addiert wird...

wegen der vorherigen Beiträge : ICh habe sie keineswegs ignoriert! Ich bin euch auch sehr dankbar ! Aber irgendwie... bin ich woh letwas behämmert :( :oops:

Re: Pygame -- Mausklick auf Objekt(oder Koordinate)

Verfasst: Dienstag 8. Mai 2012, 12:13
von Hyperion
Naja, BlackJack hat Dich ja bereits auf die "marode" Code-Stelle hingewiesen. Ich mach es noch mal deutlich:

Code: Alles auswählen

      elif event.type ==pygame.USEREVENT:
            for i in range(0,20):

                screen.blit(Objekt,[a,b])
                pygame.display.flip()
                pygame.time.delay(2000)
                screen.blit(Hintergrund,[0,0]) 
Wann wird dieser Code Deiner Meinung nach ausgeführt? Was ist ein `pygame.USEREVENT` bzw. wie wird es ausgelöst?

Hinzu kommt dann noch, dass das `delay` *nicht* im Hintergrund abläuft, sondern Deinen Code einfriert (also wenn der Rest behoben ist). So kannst Du zeitliche Verzögerung nicht umsetzen. Eine gängige Herangehensweise wäre es, mit einem `Clock`-Objekt zu arbeiten oder auf `pygame.time.set_timer` zurückzugreifen. Aber das ist erst die übernächste Baustelle ;-)

Re: Pygame -- Mausklick auf Objekt(oder Koordinate)

Verfasst: Dienstag 8. Mai 2012, 13:50
von Pyanfänger
eigentlich soll es sofort ausgeführt werden...schließlich ist das der teil der das objekt herumhüpfen lässt...

Re: Pygame -- Mausklick auf Objekt(oder Koordinate)

Verfasst: Dienstag 8. Mai 2012, 13:54
von Hyperion
Pyanfänger hat geschrieben:eigentlich soll es sofort ausgeführt werden...schließlich ist das der teil der das objekt herumhüpfen lässt...
Ich wollte nicht wissen, was Du "hoffst", dass der Code tut, sondern, Du solltest mal *erklären* wieso Du diesen Code so geschrieben hast und wieso der diese Funktionalität erfüllen soll. Denn wenn Du das einmal angehst, wirst Du vermutlich selber drauf kommen, dass das so nicht klappen kann ;-)

Re: Pygame -- Mausklick auf Objekt(oder Koordinate)

Verfasst: Dienstag 8. Mai 2012, 13:59
von BlackJack
@Pyanfänger: Da hüpft überhaupt nichts. Wenn es denn ausgeführt werden würde, dann wird 20 mal das selbe Objekt an die selbe Stelle „geblitted” mit einer kleinen Wartezeit. Für den Benutzer passiert scheinbar 40 Sekunden lang gar nichts. Das Programm reagiert in der Zeit auch auf keine Eingaben.

Re: Pygame -- Mausklick auf Objekt(oder Koordinate)

Verfasst: Dienstag 8. Mai 2012, 14:43
von /me
Pyanfänger hat geschrieben:eigentlich soll es sofort ausgeführt werden...
Aufgrund welcher Tatsache? Wann trifft denn die Bedingung zu, dass der Event-Typ gleich pygame.USEREVENT ist?

Re: Pygame -- Mausklick auf Objekt(oder Koordinate)

Verfasst: Dienstag 8. Mai 2012, 15:26
von Pyanfänger
aso habs kapiert :facepalm: ! also zu hälfte... ich melde mich gleich wieder :D

Re: Pygame -- Mausklick auf Objekt(oder Koordinate)

Verfasst: Dienstag 8. Mai 2012, 20:25
von Pyanfänger
Hallo,

Ich melde mich wieder mit der erfolgreichen Nachrich dass Zeug mit der Maus geschafft zu haben und denn code gesäubert habe :D
Danke an alle :)

Der Thread ist damit aber keinesfalls zuende :wink:
Sondern es wirft ganz neue Fragen auf ;)

MfG Pyanfänger :)

Re: Pygame -- Mausklick auf Objekt(oder Koordinate)

Verfasst: Dienstag 8. Mai 2012, 21:16
von Pyanfänger
Also jetzt die Fragen :
( falls es verboten ist eine neue Post dafür zu erstellen bitte sagen)
Also Frage Nr.1:

Das Pause-System:

Wie kann man das Spiel pausieren so dass es beim weitermachen genau so bleibt wie beim pausieren? Ich habe ein paar Zeilen code geschrieben die es mit p pausieren und mt c( habs net hingekriegt dass es mit gleichem buchstabe weitergeht) baut es denn bildschirm wieder so auf wie vorher, aber dann sind alle timer usw weg!

Nächste Fragen kommen noch, und zwar in diese post

Re: Pygame -- Mausklick auf Objekt(oder Koordinate)

Verfasst: Dienstag 8. Mai 2012, 21:30
von Hyperion
Prinzipiell sollte man für eine neue Frage einen neuen Thread aufmachen. Verboten in dem Sinne ist die Fortführung eines alten Threads nicht, aber alleine aus einem simplen Grund bietet es sich an: Du erreichst mehr Leute ;-)

(Zudem ist das Problem auch leichter "auffindbar" für Suchende)

Wenn es inhaltlich starke Verbindungen gibt, dann verlinke einfach auf den Originalthread.

So, zum Problem: Du müsstest uns schon mal Code zeigen, damit wir Dir helfen können ;-) Also schlage ich mal vor, dass Du jetzt einen neuen Thread erstellst, in dem Du das aktuelle Problem schilderst, inkl. Quellcode und Beschreibung, was passiert, was Du stattdessen erwartet hättest oder auch einer Fehlermeldung. Sei da ruhig präzise aber auch ausführlich genug. Lies Dir Deine eigene Beschreibung ruhig mehrfach durch und denke darüber nach, ob ein Außenstehender wirklich alle notwendigen Infos bekommt.

Bei grafischen Programmen kann es auch mal ein Screenshot sein, wenn es zur Verdeutlichung hilft. (Diese kannst Du nicht direkt im Board hochladen, sondern musst einen Dienst a la flickr o.ä. benutzen)