Pygame get_rect-Methode

Salman Mehmood 21 Juni 2023
  1. Verwenden Sie die get_rect-Methode von Pygame in Python
  2. die Lösung für doppelte Bilder bei der Verwendung von Pygame get_rect
Pygame get_rect-Methode

Das Hauptziel dieses Artikels ist es, zu demonstrieren, wie man ein Bild manipuliert und es mit der Methode get_rect() aus der Pygame-Bibliothek auf dem Bildschirm bewegt.

Verwenden Sie die get_rect-Methode von Pygame in Python

Während der Arbeit an einem Projekt oder Spiel in Pygame muss man in der Lage sein, die Position des Bildes auf dem Bildschirm zu manipulieren. Wenn wir beispielsweise den Player über den Bildschirm bewegen wollen, muss er seine Position auf dem Bildschirm ändern, wenn der Player eine bestimmte Taste drückt.

Betrachten Sie das folgende Beispiel:

import pygame
import sys
from pygame.locals import *

pygame.init()

# Set up the window
WIN = pygame.display.set_mode((400, 400))

# Load two images
imgOne = pygame.image.load("images\\img 1.jpg")
imgTwo = pygame.image.load("images\\img 2.jpg")

# Fill bg with black color
WIN.fill((0, 0, 0))

# Place the images
WIN.blit(imgOne, (0, 0))
WIN.blit(imgTwo, (300, 0))

pygame.display.update()

# Obtain the rectangle for each image
imgOneRect = imgOne.get_rect()
imgTwoRect = imgTwo.get_rect()

imgTwoRect.x = imgOneRect.x
imgTwoRect.y = imgOneRect.y

WIN.blit(imgTwo, (imgTwoRect.x, imgTwoRect.y))
pygame.display.update()

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

Ausgabe beim Laden der beiden Bilder:

Problemplot - Bilder laden

Ausgabe nach Verschieben des zweiten (blauen) Bildes über das rechte:

Problemplot - bewegtes Bild

Wie aus den obigen Bildern ersichtlich, versuchen wir, das blaue Bild über das erste Bild zu verschieben. Anstatt die gewünschte Eingabe zu erhalten, sehen wir, dass das blaue Bild “dupliziert” wird, und anstatt sich vollständig über das rote Bild zu bewegen, ist es jetzt an seiner ursprünglichen Position vorhanden.

Lassen Sie uns sehen, wie wir dies beheben können, damit das blaue Bild nicht “dupliziert” wird.

die Lösung für doppelte Bilder bei der Verwendung von Pygame get_rect

Betrachten Sie den folgenden Code:

import pygame
import sys
import time
from pygame.locals import *

pygame.init()

# Set up the window
WIN = pygame.display.set_mode((400, 400))

# Load two images
imgOne = pygame.image.load("images\\img 1.jpg")
imgTwo = pygame.image.load("images\\img 2.jpg")

# Fill bg with black color
WIN.fill((0, 0, 0))

# Place the images
WIN.blit(imgOne, (0, 0))
WIN.blit(imgTwo, (300, 0))

pygame.display.update()

# Make a rect of the size of the image
# set its top-left coords to (300, 0).
img2_rect = imgTwo.get_rect(topleft=(300, 0))

# Set the rect's x value to 0 (x value of red image)
img2_rect.x = 0

# Wait for two seconds
time.sleep(2)

# Redraw the background as a black color
WIN.fill((0, 0, 0))

# Draw the image (blue image) at the coordinates of the rect
WIN.blit(imgTwo, img2_rect)

# Update the screen to show newly drawn images
pygame.display.update()

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

Ausgabe nach dem Laden der beiden Bilder:

Lösung - Bilder laden

Ausgabe nach dem Verschieben des blauen Bildes über das rote Bild:

Lösung - Bild verschieben

Die Hauptidee, um dies zu erreichen, besteht darin, ein rect mit der get_rect-Methode zu erstellen.

Die Anfangsposition des Rechtecks ist (0,0). Wir müssen es auf die Position des Bildes setzen, das wir verschieben möchten.

Nachdem Sie das Rechteck initialisiert haben, ändern Sie die Position des Rechtecks dort, wo wir das Bild haben möchten. Zeichnen Sie danach den Hintergrund des Bildes neu, um sicherzustellen, dass alle alten Bildinstanzen aus der Instanz des Bildschirms entfernt werden.

Sobald der Hintergrund gezeichnet ist, können wir das Bild an die gewünschte Stelle ziehen, indem wir die Methode blit aufrufen und an das Bild und das zuvor erstellte Rechteck übergeben. Das Bild wird an den Koordinaten des Rechtecks erstellt.

Der Gesamtablauf des Programms ist wie folgt:

  1. Initialisieren Sie Pygame mit der Methode init.

  2. Stellen Sie das Fenster ein, indem Sie display.set_mode aufrufen, das normalerweise verwendet wird, um die Größe des Bildschirms zu konfigurieren, einige Flags und die Farbtiefe anzupassen.

  3. Laden Sie die beiden Bilder mit load.

  4. Füllen Sie den Hintergrund mit der gewünschten Farbe; In diesem Fall wurde der Hintergrund mit der r,g,b-Darstellung von Schwarz (0,0,0) auf Schwarz gesetzt.

  5. Zeichnen Sie die Bilder mit blit auf den Bildschirm, wozu die x- und y-Koordinaten übergeben werden müssen. Üblicherweise in Form eines Tupels angegeben.

  6. Verwenden Sie die update-Methode, um den Bildschirm zu aktualisieren und alle neuen Änderungen anzuzeigen, die an der Leinwand/am Bildschirm vorgenommen wurden. In diesem Fall wird der Hintergrund mit schwarzer Farbe ausgefüllt und die beiden geladenen Bilder angezeigt.

  7. Verwenden Sie die Methode get_rect, um ein rect zu erstellen, und übergeben Sie ein Tupel von Koordinaten, um seine Anfangsposition festzulegen. Ansonsten wird ihm normalerweise die Position (0,0) zugewiesen.

    In diesem Fall setzen wir die Position des Rechtecks auf die Position des Bildes, das wir verschieben möchten (blaues Bild).

  8. Aktualisieren Sie die Position des Rechtecks auf die neue Position, die wir festlegen möchten. Normalerweise setzen wir es auf die Position, an der sich das Bild bewegen soll.

    In diesem Fall wurde seine x-Koordinate auf die x-Koordinate des ersten (roten) Bildes gesetzt.

  9. Warten Sie einige Sekunden, um die Änderungen nach einer Verzögerung zu sehen. In diesem Fall wurde die Wartezeit auf 2 Sekunden eingestellt.

  10. Zeichnen Sie den Hintergrund des Bildes neu; Dies geschieht, um sicherzustellen, dass alle alten Bildinstanzen/Pixel, die “entfernt” werden müssen, mit dem Hintergrund überschrieben werden. In diesem Fall wurde es auf Schwarz gesetzt.

  11. Nachdem der Hintergrund gezeichnet ist, zeichnen Sie das Bild, das Sie an die gewünschte Stelle verschieben möchten. Dies geschieht mit der blit-Methode.

    In diesem Fall werden zwei Parameter übergeben. Das erste ist das Bild, das gezeichnet werden muss, und das zweite ist das rect, das wir zuvor erstellt haben.

    Das rect gibt dem Bild die Position, die auf dem Bildschirm gezeichnet werden soll. Die Position liegt üblicherweise in Form von x-y-Koordinaten vor.

  12. Um sicherzustellen, dass alle oben vorgenommenen Änderungen wie das Verschieben der Bilder, das Neuzeichnen des Hintergrunds und das Spiegeln auf dem Bildschirm gewährleistet sind, rufen wir die Funktion pygame.display.update auf.

  13. Die letzte Endlosschleife hält das Fenster am Laufen, bis es manuell geschlossen wird. Jedes Ereignis wird mit der Methode pygame.event.get abgerufen, und dann wird basierend auf der Art des Ereignisses eine Aktion ausgeführt.

    Wenn wir Tastenanschläge erfassen möchten, geschieht dies normalerweise auch hier. Wird manchmal auch als “Hauptschleife” bezeichnet.

Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn

Verwandter Artikel - Pygame Image