2016-12-12 9 views
1

Mit dem pygame Modul habe ich ein schwarzes Rechteck auf dem Bildschirm gezeichnet. Ich schreibe einen Code, der das Rechteck "hervorhebt", indem ich ein anderes (grünes) Rechteck um das Rechteck herum zeichne (mit der Breite = 4), wenn ich mit der Maus darüber gehe. Es funktioniert, aber nur, wenn die Maus darüber bewegt wird. Wenn es auf der Oberfläche des schwarzen Rechtecks ​​steht, wird das grüne Rechteck nicht angezeigt. Hier ist mein Code:Python 3.5.2: Pygame hightlight Rechteck wenn Maus drauf

import random, pygame, sys 
from pygame.locals import * 

pygame.init() 
done = False 
clock = pygame.time.Clock() 
white = (255,255,255) # COLLORS 
black = (0,0,0) 
red = (255,0,0) 
green = (0,100,0) 
display_width = 800 # SCREEN DIMMENSION 
display_height = 600 
game_display = pygame.display.set_mode((display_width,display_height)) # SCREEN 

def draw_rect(x,y): 
    rect = pygame.Rect(x, y, 40, 40) 
    pygame.draw.rect(game_display, black, rect) 
    if rect.collidepoint(mousex,mousey): 
      box_hightlight(x,y) 
def box_hightlight(x,y): 
    pygame.draw.rect(game_display,green,(x-5,y-5,50,50),4) 

while done != True: 

    x = (display_width - 40)/2 
    y = (display_height - 40)/2 

    mousex = 0 # used to store x coordinate of mouse event 
    mousey = 0 # used to store y coordinate of mouse event 

    for event in pygame.event.get(): # PRESSED KEYS EFFECTS 
     if event.type == pygame.QUIT: 
      done = True 
     elif event.type == MOUSEMOTION : 
      mousex, mousey = event.pos 
     elif event.type == MOUSEBUTTONUP: 
      mousex, mousey = event.pos 
      mouseClicked = True 

    game_display.fill(white) 
    draw_rect(x,y) 
    pygame.display.update() 
    clock.tick(60) 

Was habe ich verpasst?

Antwort

1

In draw_rect überprüfen Sie, ob die Position mousex, mousey innerhalb rect ist.

Aber in Ihrem mainloop, setzen Sie mousex, mousey-0, 0, und an die Mausposition nur dann gesetzt, wenn ein MOUSEMOTION (oder MOUSEBUTTONUP) Ereignis eintritt.

Das erklärt Ihre Es funktioniert, aber nur, wenn die Maus darüber bewegt Frage.

Verwenden Sie die Ereignisse nicht und verwenden Sie einfach pygame.mouse.get_pos, um die Mausposition zu erhalten.

+0

Vielen Dank! Es funktionierte ! Auch wenn ich nur die Maus gelöscht habe = 0 mousey = 0, hat es auch funktioniert. – ROBlackSnail