Pygame, knopf und maus problem

Hier werden alle anderen GUI-Toolkits sowie Spezial-Toolkits wie Spiele-Engines behandelt.
Antworten
Benutzeravatar
lockwood
User
Beiträge: 7
Registriert: Donnerstag 13. Dezember 2007, 14:35
Wohnort: Holland
Kontaktdaten:

Donnerstag 13. Dezember 2007, 14:47

Hallo Leute ich bin neu hier und ich habe mich hier registiert weil mein problem nicht auf dem Englischen Python-Forum geloest werden kann.

Ich habe dass folgende problem:

Ich moechte etwas passieren lassen wenn ich mit der Maus ueber ein Bild gehe und dann MOUSEBUTTONDOWN druecke. Jedoch scheint die kollision nicht zu funktionieren...

Code: Alles auswählen

#Mouse event on image
#by lockwood

def kill_window():
    pygame.display.quit()
    pygame.quit()
    return

import pygame
from pygame.locals import *
mouse_action = '0'


pygame.init()

#----------------display---------------------------
screen = pygame.display.set_mode((640, 480), 0, 32)
pygame.display.set_caption("button event by LOCKWOOD")

background = pygame.Surface(screen.get_size())
background = background.convert()
background.fill((250, 250, 250))

#---------------images--------------------------------------
mouse_cursor = pygame.image.load("muis.png").convert_alpha()
button_1 = pygame.image.load("1.png").convert_alpha()
#-------------------font------------------------------------
debug_font = pygame.font.SysFont("arial", 16)
                           


while True:

    for event in pygame.event.get():
        if (event.type == QUIT):
            sys.exit(0)
        elif (event.type == KEYDOWN):
            if (event.key == K_ESCAPE):
                exit(0)

    #mouse position
    x, y = pygame.mouse.get_pos()
    pygame.mouse.set_visible(False)

    rect_mouse_cursor = mouse_cursor.get_rect(pygame.mouse.get_pos())
    rect_button_1 = button_1.get_rect(x, y)
    collision_test1 = rect_button_1.colliderect(rect_mouse_cursor)
    print collision_test1


    #the debugger wich shows the mouse_action ('1'= True)
    debug_mouse_surface = debug_font.render(mouse_action, False, (0, 0, 0))

    #drawing
    screen.blit(background, (0,0))
    screen.blit(button_1,   (0,100))
   
    screen.blit(mouse_cursor, (x, y))
    screen.blit(debug_mouse_surface,(0,48))

    #display update
    pygame.display.update()
Ich hoffe dass ihr mich helfen koennt, schon mal danke :)
(ich komme aus Holland und mein Deutsch ist nicht perfekt)
BlackJack

Donnerstag 13. Dezember 2007, 15:38

die Argumente bei `get_rect()` werden einfach ignoriert. Dort kann man nur bestimmte "keyword"-Argumente übergeben, zum Beispiel `topleft` mit einem Tupel mit den Koordinaten der oberen linken Ecke. Beim Maus-Bild muss das die Position des Mauszeigers sein, beim Button die Position an der der Button gezeichnet wird.

Code: Alles auswählen

    rect_mouse_cursor = mouse_cursor.get_rect(topleft=(x, y)) 
    rect_button_1 = button_1.get_rect(topleft=(0, 100))
Benutzeravatar
lockwood
User
Beiträge: 7
Registriert: Donnerstag 13. Dezember 2007, 14:35
Wohnort: Holland
Kontaktdaten:

Donnerstag 13. Dezember 2007, 15:48

Toll !!!,
Die kollision funktioniert, danke BlackJack :D

Jetzt versuche ich einen event zu starten auf button_1 mit einen Mausklick. Wenn dass nicht funzt dann meld ich mich wieder. :lol:

Edit:
Ich habe folgenden linien hinzugefuegt unter collision_test1 um zu testen ob der Mausclick auf dem button_1 funktioniert. Aber es klappt nicht :(

Code: Alles auswählen

pressed_mouse = pygame.key.get_pressed()

if rect_button_1.colliderect(rect_mouse_cursor) and pressed_mouse[0]:
    mouse_action = '1'
fred.reichbier
User
Beiträge: 155
Registriert: Freitag 29. Dezember 2006, 18:27

Freitag 14. Dezember 2007, 18:36

Hallo,

ich glaube, du brauchst eher pygame.mouse.get_pressed, wenn du Mausklicks abfangen willst ;)

Gruß Fred
Benutzeravatar
lockwood
User
Beiträge: 7
Registriert: Donnerstag 13. Dezember 2007, 14:35
Wohnort: Holland
Kontaktdaten:

Freitag 14. Dezember 2007, 22:05

Ich habe mein problem jetzt mit folgendem geloest:

[code =py]
if event.type == pygame.MOUSEBUTTONDOWN and rect_button_1.colliderect(rect_mouse_cursor):
mouse_action = '1'
elif event.type == pygame.MOUSEBUTTONUP and rect_button_1.colliderect(rect_mouse_cursor):
mouse_action = '0'
[/code]

Das ganze scheint jetzt zu funktionieren :)
Danke fuer die hilfe :P
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Samstag 15. Dezember 2007, 00:43

Ehm, für Wahrheitswerte gibt es auch `True` und `False`...
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Antworten