Heim >Backend-Entwicklung >Python-Tutorial >Warum zeichnet mein PyGame-Code nichts?

Warum zeichnet mein PyGame-Code nichts?

DDD
DDDOriginal
2024-12-26 00:37:13595Durchsuche

Why Doesn't My PyGame Code Draw Anything?

Warum PyGame nichts zeichnen kann

Ihr PyGame-Projekt zielt darauf ab, mit pygame.draw.rect() einen Hintergrund mit einer grauen Unterseite und einer schwarzen Oberseite zu erstellen Funktion. Trotz früherer erfolgreicher Erfahrungen mit dieser Funktion stoßen Sie auf inkonsistente Zeichenergebnisse. Manchmal erhalten Sie einen schwarzen Bildschirm, während manchmal teilweise ein graues Rechteck auf dem Bildschirm erscheint.

Die Verwirrung entsteht durch die Tatsache, dass das Zeichnen allein in PyGame keine sichtbare Ausgabe erzeugt. Nachdem Sie die zugehörige Oberfläche geändert haben, müssen Sie die Anzeige aktualisieren, um diese Änderungen sichtbar zu machen.

Anzeigeaktualisierung

Das Zeichnen erfolgt auf einem Oberflächenobjekt, das mit der PyGame-Anzeige verknüpft ist. Diese Änderungen werden jedoch nicht automatisch in der Anzeige widergespiegelt. Um sie sichtbar zu machen, müssen Sie die Anzeige explizit mit pygame.display.update() oder pygame.display.flip() aktualisieren.

pygame.display.flip() aktualisiert das Ganze display, während pygame.display.update() selektivere Aktualisierungen für bestimmte Bereiche des Bildschirms bereitstellt. Es ist normalerweise stärker für Software-Anzeigen optimiert, wird jedoch nicht für hardwarebeschleunigte Anzeigen unterstützt.

PyGame-Anwendungsschleife

Eine typische PyGame-Anwendungsschleife besteht aus mehreren Schritten:

  1. Ereignisbehandlung: Behandeln Sie Ereignisse mit pygame.event.pump() oder pygame.event.get().
  2. Statusaktualisierungen: Spielstatus und Objektpositionen basierend auf Eingabeereignissen und Zeit (Frames) aktualisieren.
  3. Anzeige löschen : Löschen Sie die Anzeige oder zeichnen Sie einen Hintergrund.
  4. Szenenzeichnung: Zeichnen Sie alle Objekte in der Szene.
  5. Aktualisierung anzeigen: Rufen Sie pygame.display.update() oder pygame.display.flip() auf, um Änderungen sichtbar zu machen.
  6. Begrenzung der Bildrate : Begrenzen Sie die Bilder pro Sekunde, um eine übermäßige CPU-Auslastung mit pygame.time.Clock.tick zu vermeiden.

Code Beispiel

Hier ist ein geänderter Code, der Anzeigeaktualisierungen enthält:

import pygame
from pygame.locals import *
pygame.init()

DISPLAY = pygame.display.set_mode((800,800))
pygame.display.set_caption("thing")
clock = pygame.time.Clock()

run = True
while run:
    # handle events
    for event in pygame.event.get():
        if event.type == QUIT:
            run = False

    # clear display
    DISPLAY.fill(0)

    # draw scene
    pygame.draw.rect(DISPLAY, (200,200,200), pygame.Rect(0,400,800,400))

    # update display
    pygame.display.flip()

    # limit frames per second
    clock.tick(60)

pygame.quit()
exit()

Durch die Einbindung der erforderlichen Anzeigeaktualisierungen sollten Sie nun den erwarteten Hintergrund mit einer grauen Unterseite und einer schwarzen Oberseite sehen.

Das obige ist der detaillierte Inhalt vonWarum zeichnet mein PyGame-Code nichts?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn