Jython HomeDruckenJava-Online

Figuren bewegen


Das Grundkonzept von JGameGrid besteht darin, den Actors ein dynamisches "Eigenleben" zu geben. Sobald im Navigationsbalken die Schaltfläche Run gedrückt wird oder die Funktion doRun() aufgerufen wird, startet ein Simulationszyklus, in dem die Methode act() periodisch aufgerufen wird. Die Simulationsperiode kann mit dem Schieberegler verändert werden.

Mit Klick auf Step kann man die Bewegung schrittweise laufen lassen, mit Stop kann man eine Pause einschalten.

Beispiel 1: Der Fisch soll hin und her schwimmen.

Die Methode act() wird in der Klasse Fish definiert, muss daher den Parameter self haben. Alle Methoden der Basisklasse Actor müssen mit self. aufgerufen werden. Mit move() bewegt sich der Fisch in jeder Simulationsperiode (200 Millisekunden) in die nächste Zelle.

 
Ausführen mit Webstart

Wenn sich der Fisch in der letzten oder ersten Zelle befindet, dreht er die Bewegungsrichtung um 180°. Mit dem Schieberegler im Navigationsbalken kann man die Bewegungsgeschwindigkeit ändern. Sind mehrere Objekte der Klasse Fish vorhanden, so bewegen sich alle gemäss den Vorgaben in der Methode act().

# Gg3.py

from gamegrid import *


# -------------- class Fish -----------------------------
class Fish(Actor):
    def __init__(self):
        Actor.__init__(self, "sprites/nemo.gif")
    def act(self):
        self.move()
        if (self.getX()== 9) or (self.getX() == 0):
            self.turn(180)
 
# ----------------- 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:

def act(self): Definiert die Methode act(). Diese wird automatisch in jeder Simulationsperiode (ca. 200 Millisekunden) aufgerufen
move() bewegt den Fisch in die nächste Zelle
getX() gibt die x-Koordinate (Zellennummer), an der sich der Fisch befindet zurück.

 

Beispiel 2: Der Fisch soll auch hier hin und her schwimmen und am Rand des Spielfensters um 180° drehen. Im Unterschied zum vorhergehenden Beispiel, soll er aber immer vorwärts schwimmen, d.h. am rechten Fensterrand sein Spreitebild spiegeln und am linken Fensterrand die Spiegelung wieder aufheben.

Mit der Methode setHorzMirror(True) kann ein Spritebild gespiegelt werden. In der Zelle 9 wird das Bild gespiegelt, in der Zelle 0 wird die Spiegelung mit setHorzMirror(False)wieder aufgehoben.

 

Ausführen mit Webstart
# Gg3a.py

from gamegrid import *


# --------------- class Fish ----------------------------
class Fish(Actor):
    def __init__(self):
        Actor.__init__(self, "sprites/nemo.gif")
    def act(self):
        self.move()
        if self.getX()== 9: 
            self.turn(180)
            self.setHorzMirror(True)
        if self.getX()== 0:
            self.turn(180) 
            self.setHorzMirror(False)

# ------------------- main ---------------------------------
makeGameGrid(10, 10, 60, Color.red, "sprites/reef.gif")
nemo = Fish()
addActor(nemo, Location(1, 3))
show()
Programmcode markieren (Ctrl+C kopieren, Ctrl+V einfügen)

 

Erklärungen zum Programmcode:

setHorzMirror(True)  Spiegelt das Sprite-Bild . Standardmässig ist setHorzMirror(False) gesetzt
setHorzMirror(False) Macht die Spiegelung wieder rückgängig

 

Beispiel 3: Der Fisch startet in der Zelle (0, 0) und bewegt sich von Zelle zu Zelle. Wenn er die Zelle mit der x-Koordinate 9 erreicht, dreht er um 90°. Da x nach dem nächsten Schritt immer noch 9 ist, muss er noch einmal drehen. Am linken Rand muss er jeweils um 270° drehen.

   

 

 
Ausführen mit Webstart
# Gg3b.py

from gamegrid import *


# --------------- class Fish ----------------------------
class Fish(Actor):
    def __init__(self):
        Actor.__init__(self, "sprites/nemo.gif")
    def act(self):
        self.move()
        if self.getX()== 9: 
            self.turn(90)
            self.setHorzMirror(True)
        if self.getX()== 0:
            self.turn(270) 
            self.setHorzMirror(False)

# ------------------- main ---------------------------------
makeGameGrid(10, 10, 60, Color.red, "sprites/reef.gif")
nemo = Fish()
addActor(nemo, Location(0, 0))
show()
Programmcode markieren (Ctrl+C kopieren, Ctrl+V einfügen)

 

Erklärungen zum Programmcode:

turn(90)  dreht um 90° im Uhrzeigersinn