Jython HomeDruckenJava-Online

Actors

Alle Spielfiguren werden als Objekte einer Klasse, die von der Klasse Actor abgeleitet sind, aufgefasst. Dadurch lässt sich bereits bei den ersten Programmbeispielen das OOP-Konzept vorbildlich realisieren. Jedem Actor ist ein Sprite-Bild zugeordnet. Ein Actor kann aber auch mehrere Sprites haben.

Die Definition einer Klasse in Python beginnt mit dem Schlüsselwort class. Der Klassennamen wird mit grossem Anfangsbuchstaben geschrieben. Wird eine Klasse abgeleitet, so muss der Name der Basisklasse in einer Klammer angegeben werden. Abgeleitete Klassen erben alle Methoden der Basisklasse, man kann aber auch weitere Methoden hinzufügen. Eine Methode unterscheidet sich von einer Funktion nur in zwei Aspekten:
- sie ist innerhalb einer class-Definition definiert
- der erste Parameter einer Methode ist immer self

Eine Klasse besitzt eine spezielle Methode, den sogenannten Konstruktor. Die Konstruktoren in Python werden immer mit def __init__(self) definiert (zwei Underlines vor und nach init). In der Programmstruktur erfolgen die Klassendefinition immer vor dem Hauptblock. Um das Programm übersichtlicher zu gestalten, fügen wir vor der Klassendefinition und vor dem Beginn des Hauptblocks Kommentarlinien ein.

Beispiel 1: Wir definieren eine Klasse Fish, die von der Klasse Actor abgeleitet ist und lassen ein Objekt dieser Klasse im Spielfenster erscheinen.

Der Klasse Fish ist das Spritebild nemo.gif zugeordnet. Damit ein Fisch im Spielfenster erscheint, müssen wir im Hauptprogramm ein Objekt dieser Klasse erzeugen. Wir nennen es nemo und erzeugen es durch Aufruf des Klassennamens. Mit addActor(nemo, Location(1, 3)) wird nemo zum Spielfenster in der Zelle (1, 3) hinzugefügt (die Nummerierung der Zellen beginnt bei 0). Man kann mehrere Objekte der Klasse Fish erzeugen und zum Spielfenster hinzufügen.

 

 
Ausführen mit Webstart
# Gg2.py

from gamegrid import *

# ------------- class Fish -------------------------------
class Fish(Actor):
    def __init__(self):
        Actor.__init__(self, "sprites/nemo.gif")
 
# ---------------- main ----------------------------------
makeGameGrid(10, 10, 60, Color.red, "sprites/reef.gif")
nemo = Fish()
addActor(nemo, Location(1, 3))
wanda = Fish()
addActor(wanda, Location(6, 7))
show()
Programmcode markieren (Ctrl+C kopieren, Ctrl+V einfügen)

 

Erklärungen zum Programmcode:

class Fish(Actor): Die Klasse Fish wird von der Klasse Actor abgeleitet und erbt dadurch alle Methoden dieser Klasse
Actor.__init__(self, "sprites/nemo.gif") Der Konstruktor der Basisklasse Actor wird aufgerufen. Diesem übergibt man den Pfad des Sprite-Bildes

 

Beachte:

Alle Spritebilder, die in unserer Lernumgebung verwendet werden, sind in der Distribution tigerjython2.jar enthalten. Man kann selbstverständlich auch eigene Bilder verwenden. Diese müssen im Unterverzeichnis sprites des Verzeichnisses, in dem sich Ihr Programm befindet, oder im <user home>\gamegrid\sprites gespeichert sein. Die Spritebilder haben ein Grösse von ungefähr 50x50 Pixel. Der Hintergrund des Sprites muss transparent sein, damit er das Hintergrundbild nicht überdeckt.

Angenommen, die Datei tigerjython.jar ist auf Ihrer Festplatte im Verzeichnis myJython und Ihr eigenes Spritebild xyz.gif im Unterverzeichnis sprites gespeichert. Dann wird im Konstruktor des Actors folgendes Pfad eingetragen:

Actor.__init__(self, "sprites/xyz.gif")