Die Methode collidepoint() in Pygame
Dieser Artikel zeigt, wie man mit Pygame Text in Python zeichnet. Dies ist nicht der vollständige Code für ein funktionierendes Python-Spielfenster.
Wenn Sie an einem Barebones-Arbeitsframework interessiert sind, lesen Sie diesen Artikel.
Verwenden Sie die collidepoint()
-Methode in Pygame
In der Methode collidepoint()
der Klasse rect
testen wir, ob ein gegebener Punkt innerhalb des rect
liegt. Als Nächstes erstellen wir eine Schaltfläche, die die Farbe ändert, wenn Sie mit der Maus darüber fahren.
Sie können die Funktion entweder separat mit der x- und y-Koordinate versorgen oder sie in einer iterierbaren Form wie einem Tupel oder einer Liste bereitstellen.
Syntax:
rect.collidepoint(x, y)
rect.collidepoint((x, y))
Jetzt verwenden wir collidepoint()
, um die Farbe einer Oberfläche zu ändern, wenn wir darüber schweben. Wir tun die folgenden Dinge, um dies einzurichten.
- Beginnen Sie mit der Definition eines
rect
mit der Methodecollidepoint()
. - Fahren Sie fort, indem Sie eine Fläche mit der angegebenen
rechten
Breite und Höhe erstellen. - Als letztes vor der Hauptschleife erstellen wir zwei Variablen. Eine repräsentiert die normale Farbe und eine die Hover-Farbe.
# Before Main loop
rect = pygame.Rect(10, 10, 100, 60)
btn_surface = pygame.Surface((rect.width, rect.height))
normal_color = (200, 100, 100)
hover_color = (100, 200, 100)
Wir erhalten die Mausposition in der Hauptschleife und prüfen, ob sie sich innerhalb des rect
befindet.
- Wir erhalten die Mausposition und übergeben sie an die Methode
collidepoint()
des oben erstelltenrect
. - Wenn sich herausstellt, dass die Maus oben ist, füllen wir die Schaltflächenoberfläche mit unserer Hover-Farbe. In allen anderen Fällen füllen wir es mit der normalen Farbe.
- Zuletzt strahlen wir die Oberfläche auf den Bildschirm.
# In the Main loop
if rect.collidepoint(pygame.mouse.get_pos()):
btn_surface.fill(hover_color)
else:
btn_surface.fill(normal_color)
screen.blit(btn_surface, rect)
Vollständiger Code:
# Imports
import sys
import pygame
# Configuration
pygame.init()
fps = 60
fpsClock = pygame.time.Clock()
width, height = 640, 480
screen = pygame.display.set_mode((width, height))
# Before Main loop
rect = pygame.Rect(10, 10, 100, 60)
print(rect.width)
btn_surface = pygame.Surface((rect.width, rect.height))
normal_color = (200, 100, 100)
hover_color = (100, 200, 100)
# Game loop.
while True:
screen.fill((20, 20, 20))
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.quit()
sys.exit()
# In the Main loop
if rect.collidepoint(pygame.mouse.get_pos()):
btn_surface.fill(hover_color)
else:
btn_surface.fill(normal_color)
screen.blit(btn_surface, rect)
pygame.display.flip()
fpsClock.tick(fps)
Ausgang:
Hi, my name is Maxim Maeder, I am a young programming enthusiast looking to have fun coding and teaching you some things about programming.
GitHub