Der Ball
Der Ball hat seine ganz eigenen Bewegungen – und muss daher natürlich als eigene Klasse, abgeleitet von Actor, definiert werden.
class Ball(Actor):
Was braucht der Ball? Er braucht eine Geschwindigkeit, mit der er sich nach unten bewegt (also fällt). Und er braucht eine act()-Methode, die dafür sorgt, dass er in jedem Takt ein Stück weiter fällt und sich dabei seine Geschwindigkeit leicht erhöht (das simuliert die Schwerkraft). Fangen wir mal an.
class Ball(Actor):
speed = 0.5
def act(self):
ypos = self.getY()
ypos += self.speed
self.setY(int(ypos))
self.speed += 0.2
Die Anfangsgeschwindigkeit wird hier mit der Eigenschaft speed auf 0.5 gesetzt. Das heißt, der Ball fällt mit 0.5 Pixeln Geschwindigkeit pro Spieltakt herunter. Das wird in der act()-Methode umgesetzt.
In der act()-Methode wird erst die vertikale Position des Balls ermittelt. Dann wird der Geschwindigkeitswert (self.speed) hinzugerechnet – dann wird der Ball auf den neuen Wert gesetzt (also etwas weiter unten), dann wird die Geschwindigkeit selber um 0.2 erhöht. Das Setzen auf die neue y-Position erfolgt auch hier wieder mit int(ypos) – warum? Weil es keine »halben Pixel« gibt. Das ist genauso wie bei Space Attack – die Pixelzahl muss immer eine Ganzzahl sein.
Jetzt sollte der Ball schon fallen können. Das probieren wir gleich mal aus. Es muss nur noch ein konkretes Objekt Ball erstellt werden, und mit doRun() sollte der Ball dann bereits fallen.
Diese Zeilen fügst du jetzt vor feld.show() ein, damit ist dann schon ein Ball erzeugt.
ball = Ball("sprites/peg_5.png")
feld.addActor(ball, Location (400,10))
Starte das Programm einmal: Du wirst sehen, der Ball beginnt zu fallen und beschleunigt. Schnell ist er aus dem Bild verschwunden.
Abbildung 21.1 Kurz nach dem Start ist der Ball schon weg.