2016-12-09 2 views
0

Ich möchte eine Anweisung drucken, wenn der Mauszeiger über ein Bild auf dem Bildschirm geladen ist, aber es nur gedruckt, wenn der Mauszeiger über den oberen linken Teil des Bildschirms schwebt, auch wenn das Bild ist in der Mitte oder unten rechts.pygame Erkennung Mauszeiger über Objekt

import pygame, sys 
from pygame import * 

def main(): 
    pygame.init() 
    FPS = 30 
    fpsClock = pygame.time.Clock() 
    screen = pygame.display.set_mode((600, 400)) 
    cat = pygame.image.load('cat.png') 

    while True: 
     if cat.get_rect().collidepoint(pygame.mouse.get_pos()): 
      print "The mouse cursor is hovering over the cat" 

     for event in pygame.event.get(): 
      if event.type == QUIT: 
       pygame.quit() 
       sys.exit() 

     screen.blit(cat, (300, 100)) 
     pygame.display.flip() 
     fpsClock.tick(FPS) 
main() 
+0

Beispiel [Taste mit Schweben] (https://github.com/furas/my-python-codes/tree/master/pygame/button-hover) – furas

Antwort

1

Verfahren Surface.get_rect() ein Rechteck von der gleichen Größe wie das Bild zurückgibt, aber nicht an der gleichen Stelle! Sie erhalten ein Rechteck bei (0, 0), weshalb es gedruckt wird, wenn sich Ihre Maus in der oberen linken Ecke befindet. Sie können stattdessen die Argumente verwenden, die Sie zum Positionieren der Oberfläche verwenden, und sie an die Methode Surface.get_rect(x=300, y=100) übergeben.

Oder noch besser, erstellen Sie das Rechteck zur gleichen Zeit, die Sie Ihr Bild laden. Auf diese Weise müssen Sie nicht für jede Schleife ein neues Rechteck erstellen. Man könnte dann das Bild positioniert basierend auf dem rect:

import pygame, sys 
from pygame import * 

def main(): 
    pygame.init() 
    FPS = 30 
    fpsClock = pygame.time.Clock() 
    screen = pygame.display.set_mode((600, 400)) 
    cat = pygame.image.load('cat.png') 
    rect = cat.get_rect(x=300, y=100) # Create rectangle the same size as 'cat.png'. 

    while True: 
     if rect.collidepoint(pygame.mouse.get_pos()): 
      print "The mouse cursor is hovering over the cat" 

     for event in pygame.event.get(): 
      if event.type == QUIT: 
       pygame.quit() 
       sys.exit() 

     screen.blit(cat, rect) # Use your rect to position the cat. 
     pygame.display.flip() 
     fpsClock.tick(FPS) 
main() 
Verwandte Themen