pygame
Das Wesentliche
Suche…
Zeichnen und eine grundlegende Animation
Dieses Programm zeichnet einige Formen und ' Hallo Welt! 'und lass ein Bild in jede Ecke des Fensters gehen.
der vollständige Code:
import pygame,sys
from pygame.locals import *
pygame.init()
FPS = 30 #frames per second setting
fpsClock = pygame.time.Clock()
#set up the window
screen = pygame.display.set_mode((500,400), 0, 32)
pygame.display.set_caption('drawing')
#set up the colors
black = ( 0, 0, 0)
white = (255, 255, 255)
red = (255, 0, 0)
green = ( 0, 255, 0)
blue = ( 0, 0, 255)
imageImg = pygame.image.load('baddie.png')
imagex = 320
imagey = 220
direction = 'left'
fontObj = pygame.font.Font('freesansbold.ttf', 32)
text = fontObj.render('Hello World!', True, green, blue)
rect = text.get_rect()
rect.center = (200, 150)
# the main game loop
while True:
screen.fill(white)
# draw a green polygon onto the surface
pygame.draw.polygon(screen, green, ((146, 0), (291, 106), (236, 277), (56, 277), (0, 106)))
# draw some blue lines onto the surface
pygame.draw.line(screen, blue, (60, 60), (120, 60), 4)
pygame.draw.line(screen, blue, (120, 60), (60, 120))
pygame.draw.line(screen, blue, (60, 120), (120, 120), 4)
# draw a blue circle onto the surface
pygame.draw.circle(screen, blue, (300, 50), 100, 0)
# draw a red ellipse onto the surface
pygame.draw.ellipse(screen, red, (300, 250, 80,80), 1)
# draw a red rectangle onto the surface
pygame.draw.rect(screen,red, (200, 150, 100, 50))
# draw the text onto the surface
screen.blit(text, rect)
if direction == 'right':
imagex += 5
if imagex == 320:
direction = 'down'
elif direction == 'down':
imagey += 5
if imagey == 220:
direction = 'left'
elif direction == 'left':
imagex -= 5
if imagex == 20:
direction = 'up'
elif direction == 'up':
imagey -= 5
if imagey == 20:
direction = 'right'
screen.blit(imageImg, (imagex, imagey))
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
pygame.display.update()
fpsClock.tick(FPS)
Pygame und das Fenster einrichten:
import pygame,sys
from pygame.locals import *
pygame.init()
#set up the window
screen = pygame.display.set_mode((500,400), 0, 32)
pygame.display.set_caption('drawing')
den weißen Hintergrund zeichnen:
In dieser Funktion legen Sie die Farbe des Hintergrunds fest.
screen.fill(white)
das grüne Polygon zeichnen:
Hier definieren Sie die Anzeigeoberfläche, die Farbe und die Position jeder Ecke des Polygons (X- und Y-Koordinaten). Dies kann im Uhrzeigersinn und gegen den Uhrzeigersinn erfolgen.
pygame.draw.polygon(screen, green, ((146, 0), (291, 106), (236, 277), (56, 277), (0, 106)))
die blauen Linien zeichnen:
In dieser Funktion definieren Sie die Anzeigeoberfläche, die Farbe, den ersten und letzten Punkt und die Breite der Linie (wenn Sie keine Breite angeben, ist dies nur 1).
pygame.draw.line(screen, blue, (60, 60), (120, 60), 4)
pygame.draw.line(screen, blue, (120, 60), (60, 120))
pygame.draw.line(screen, blue, (60, 120), (120, 120), 4)
den blauen Kreis zeichnen:
In dieser Funktion definieren Sie die Anzeigeoberfläche, die Farbe, die Position, den Radius und die Breite des Kreises (wenn Sie für die Breite eine 0 angeben, handelt es sich um einen einfachen Kreis).
pygame.draw.circle(screen, blue, (300, 50), 100, 0)
Zeichnen der Ellipse:
In dieser Funktion definieren Sie die Anzeigeoberfläche, die Farbe, die Position, die horizontale Größe und die vertikale Größe und die Breite.
pygame.draw.ellipse(screen, red, (300, 250, 80,80), 1)
Zeichnen des Rechtecks:
In dieser Funktion definieren Sie die Anzeigeoberfläche, die Farbe, die Position sowie die horizontale und vertikale Größe.
pygame.draw.rect(screen,red, (200, 150, 100, 50))
Definieren des Textes:
Zunächst definieren Sie mit dieser Funktion den Typ und die Größe Ihres Textes:
fontObj = pygame.font.Font('freesansbold.ttf', 32)
Dann definieren Sie den tatsächlichen Text, wenn der Text fett ist, die Farbe und, wenn Sie möchten, die Farbe der Markierung. Das können Sie mit dieser Funktion machen:
text = fontObj.render('Hello World!', True, green, blue)
Wenn Sie Ihren Text markieren möchten, müssen Sie pygame dies mit dieser Funktion mitteilen:
rect = text.get_rect()
Und wenn Sie die Position der Textmitte definieren möchten, können Sie dies mit dieser Funktion tun:
rect.center = (200, 150)
den Text zeichnen:
Wenn Sie eine Markierung und / oder die Mitte definiert haben:
screen.blit(text, rect)
Ansonsten müssen Sie die Position des Textes definieren, so dass der Text folgendermaßen gezeichnet wird:
screen.blit(text, (100,50))
das bild definieren:
Hier legen Sie fest, welches Image Sie verwenden möchten (wenn Sie dies auf diese Weise tun, muss sich die Image-Datei im selben Verzeichnis wie Ihre Programmdatei befinden), die Startposition (x und y) und die Richtung des Images.
image = pygame.image.load('image.png')
baddiex = 320
baddiey = 220
direction = 'left'
das Bild animieren:
Mit diesem Teil des Codes überprüfen wir die Richtung des Bildes, wenn es eine Ecke erreicht hat. Wenn ja, ändern Sie die Richtung. Wenn nicht, zeichnen Sie das Bild 5 Pixel weiter in dieselbe Richtung.
if direction == 'right':
imagex += 5
if imagex == 360:
direction = 'down'
elif direction == 'down':
imagey += 5
if imagey == 260:
direction = 'left'
elif direction == 'left':
imagex -= 5
if imagex == 20:
direction = 'up'
elif direction == 'up':
imagey -= 5
if imagey == 20:
direction = 'right'
screen.blit(imageImg, (imagex, imagey))
Hinweis: Mein Bild ist 20x20 Pixel, ich verwende es, if imagex == 360:
und if imagey == 260:
da mein Bild 20 Pixel vom Rand des Fensters entfernt ist, genau wie die anderen 2 Ecken. Wenn Ihr Bild eine andere Größe hat, müssen Sie diese Zahlen wahrscheinlich ändern.
auf Quittung prüfen:
Hier überprüfen wir, ob Sie das Pygame-Fenster geschlossen haben. Wenn ja, schließen Sie das Fenster. Wenn Sie dies nicht irgendwo in Ihr Programm schreiben, können Sie das Fenster wahrscheinlich nicht schließen.
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
Aktualisierung des Bildschirms:
Mit dieser Funktion aktualisieren Sie den Bildschirm, sodass alles, was Sie gezeichnet haben, sichtbar wird.
pygame.display.update()
FPS-Einstellung:
Mit dieser Funktion teilen Sie Pygame mit, dass Sie genug Schlaf benötigen, damit Ihre FPS-Einstellung berücksichtigt wird.
fpsClock.tick(FPS)
Verwendung mit PIL
Wenn Sie sowohl PIL als auch Pygame verwenden müssen, weil in beiden Funktionen fehlende Funktionen vorhanden sind, müssen Sie zwischen Pygame-Oberflächen und PIL-Images konvertieren, vorzugsweise ohne sie auf die Festplatte zu schreiben.
Dazu können Sie in beiden Bibliotheken die Funktionen "tostring" und "fromstring" verwenden.
Umstellung von PIL auf Pygame:
strFormat = 'RGBA'
raw_str = image.tostring("raw", strFormat)
surface = pygame.image.fromstring(raw_str, image.size, strFormat)
Umstellung von Pygame auf PIL:
strFormat = 'RGBA'
raw_str = pygame.image.tostring(surface, strFormat, False)
image = Image.frombytes(strFormat, surface.get_size(), raw_str)