Suche

Home Infos/Tutorials PyGame Erste Schritte in PyGame
Erste Schritte in PyGame PDF Drucken E-Mail
Geschrieben von: Matthias Meike   
Mittwoch, den 30. Juni 2010 um 12:27 Uhr

Allgemeines zu PyGame

PyGame ist ein Multimedia Framework welches speziell für die Spieleprogrammierung
entwickelt wurde. Das Framework basiert auf der in C geschriebenen SDL Bibliothek
und läuft aufgrund der C Routinen auch in einer hohen Interpretersprache wie Python
sehr schnell.
Das Framework ist für die erstellung von 2D Spielen ausgelegt und beinhaltet Module
für Video-, Audioausgabe, Ereignisbehandlung, Zeitsteuerung, Joystickzugriff und vieles mehr.
In verbindung mit OpenGL bzw. einem separaten 3D Framework ist es ebenfalls möglich
3D Scenen mit PyGame darzustellen.

Die erste PyGame Anwendung

Im Folgenden seht ihr den grundlegenden Aufbau einer PyGame Anwendung. Es wird
davon ausgegangen, dass ihr PyGame bereits auf eurem Rechner installiert habt.
-- Download von PyGame --
Grundlegender Aufbau eines PyGame Programms
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
import pygame
from pygame.locals import *
 
pygame.init()
 
running = True
resolution = (640,480)
bgcolor = (0,0,255)
timer = pygame.time.Clock()
 
screen = pygame.display.set_mode(resolution)
pygame.display.set_caption("Mein erstes Pygame Programm")
 
while running:
    timer.tick(30)
 
    for event in pygame.event.get():
        if event.type == QUIT:
            running = False
        elif event.type == KEYDOWN:
            if event.key == K_ESCAPE:
                running = False
 
    screen.fill(bgcolor)
    pygame.display.flip()
 


Das oben stehende Programm erstellt ein Fenster in der Auflösung von 640x480, füllt den Bildschirm mit blauer Farbe und lässt sich
entweder durch einen Klick auf das "X" in der Titelleiste oder durch Betätigung der ESC Taste beenden.

Gehen wir das Beispiel einmal zeilenweise durch...

Zeile 1
In der ersten Zeile wird das PyGame Modul importiert, welches die am häufigsten
verwendeten Funktionalitäten enthält.

Zeile 2
Hier werden PyGame-Konstanten importiert welche bei der Ereignisbehandlung
verwendung finden (z.B. QUIT, KEYDOWN, K_ESCAPE)

Zeile 4
Durch Aufruf der init-Funktion werden die wichtigsten Module bzw. deren Objekte
initialisiert. Vor diesem Aufruf können die Meisten Funktionen von PyGame nicht genutzt werden.

Zeile 6
Die hier definierte Variable "running" steuert die Hauptschleife (Main Loop) und wird für
die Beendigung des Programms, bzw. den Ausstieg aus der Endlosschleife verwendet.
Ein Computerspiel arbeitet im Prinzip ähnlich wie ein Zeichentrickfilm.
Dem Betrachter werden einzele Bilder in solch hoher Frequenz präsentiert, dass sein Auge
nicht mehr in der Lage ist diese als Einzelbilder zu registrieren und leichte Verschiebungen
der dargestellten Objekte in der Bildfolge als fließende Bewegung wahrgenommen werden.

Zeile 7
Hier wird ein Tuple für die Auflösung des Fensters erstellt. Der erste Wert definiert die Anzahl
an Pixeln auf der X-Achse, der Zweite ist für die Y-Achse zuständig.

Zeile 8
Die Variable "bgcolor" beinhaltet einen RGB Wert mit dem später der Bildschirmhintergrund
gefüllt wird.
RGB steht für Rot-Grün-Blau (Red-Green-Blue) und reguliert den jeweiligen Farbanteil von 0 bis 255.
"(0,0,255)" steht hier demnach für ein kräftiges Blau.

Zeile 9
Zeile neun erstellt ein Zeitgeber Objekt der Klasse "Clock" welches für die
Framebegrenzung notwendig ist. (Dazu später mehr)

Zeile 11
Hier wird ein Fenster mit der in der Variable "resolution" gespeicherten Auflösung erstellt.
über die Funktion "set_mode" kann außerdem z.B zusätzlich festgelegt werden ob das Spiel im
Vollbildmodus laufen, oder auf die Hardwarebeschleunigung zurückgreifen soll. (Näheres in der PyGame Referenz)
Die Funktion leifert als Rückgabe ein PyGame - Surface welches als oberste "Leinwand" für das Zeichnen von
Objekten dient und exakt die Maße des Bildschirms besitzt.

Zeile 12
Diese Zeile sollte selbsterklärend sein, hier wird der Fenstertitel festgelegt.

Zeile 14
"while running" startet den Gameloop (Spielschleife). Alle folgenden Anweisungen werden also
wiederholt bei jedem Schleifendruchlauf ausgeführt. Die Schleife wird so lange durchlaufen bis die
Variable "running" den Wert "False" enthält.

Zeile 15
Um zu gewährleisten, dass das Spiel auf allen Rechnern in der selben Geschwindigkeit läuft und zu
verhindern, dass bereits ein simpler Pong-Clone 100% der CPU Leistung frisst wird die Wiederholungsrate
mittels Timer in diesem Beispiel auf 30 Frames pro Sekunde beschränkt.
Ihr solltet Frametimer daher in allen euren Games verwenden.

Zeile 17-22
In den Zeilen 17 bis 22 findet die Ereignisverarbeitung  statt. PyGame hält einen Stapel
mit sämtlichen aufgetretenen Ereignissen (gedrückte Tasten auf der Tastatur, Maus, Zeitgesteuerte Ereignisse, etc.) bereit welche in einer
Schleife abgearbeitet werden (Zeile 17). Für jedes Ereignis im Queue wird zunächst unterschieden um
welchen Ereignistyp es sich handelt (Zeile 18 und 20). In Zeile 18 wird auf das Ereignis reagiert,
welches durch den Klick auf das "X" im Fenstertitel ausgelöst wird. Trifft dieses Ereignis ein wird die Variable
"running" in Zeile 19 auf False gesetzt und die Schleife somit verlassen.
Handelt es sich wie in Zeile 20 abgefragt um ein Tastaturereignis wird in Zeile 21 geprüft ob die
ESC-Taste betätigt wurde und ebenfalls "running" auf False gesetzt.
(Die groß geschriebenen Konstanten stammen aus dem Import in Zeile 2)
Wichtig: Solltet ihr vergessen auf Quit-Events zu reagieren kann das Programm nur noch beendet werden indem der Task abgeschossen wird!

Zeile 24
Das Screen-Objekt füllt den gesamten Bildschirm mit der in bgcolor hinterlegten Farbe (blau)

Zeile 25
Diese Anweisung tauscht den Frontbuffer und den Backbuffer aus um Flackern beim Bildaufbau zu
vermeiden.
Stellt euch Front- und Backbuffer wie eine drehbare Schultafel vor. Der Frontbuffer zeigt der Schluklasse
das fertige Tafelbild, während der Lehrer auf der Rückseite (Backbuffer) bereits das nächste Bild zeichnet.
Ist das Bild im Backbuffer vollständig, werden die beiden Buffer vertauscht und der vorheriger Frontbuffer
wird im Hintergrund leergewischt und neu bemalt.
Auf diese Weise verhindert man einen Flackereffekt der entsteht wenn sich das Bild für den Anwender sichtbar, zeilenweise aufbaut.

Zeile 26 (Der Vollständigkeit halber)
Die Spielschleife wurde verlassen und das Programm beendet sich automatisch.



Zuletzt aktualisiert am Donnerstag, den 22. Juli 2010 um 13:53 Uhr
 
     © Matthias Meike - LaymaXx.de
CSS ist valide!