Game-Apps für Smartphones und Tablets |
|
Bern University oh Teacher Education |
Beispiel 1: Der Fisch soll hin und her schwimmen und dabei immer vorwärts schauen. Wenn sich der Fisch in einer Randzelle befindet, muss er seine Bewegungsrichtung um 180° drehen und dabei sein Sprite-Bild spiegeln. Mit der Methode setHorzMirror() kann ein Bild gespiegelt werden. Da wir in diesem Beispiel unterscheiden müssen, ob sich der Fisch am rechten oder linken Rand befindet, verwenden wir zur Übuerprüfung der Randzellen die Methode getX(). Diese gibt die x-Koordinate der aktuellen Zelle zurück. |
![]() |
![]() |
Beispiel im Online-Editor bearbeiten
App installieren auf Smartphone oder Tablet
Sources downloaden (AndroidEx2.zip)
// AndroidEx2.java package app.ex2; import ch.aplu.android.*; public class AndroidEx2 extends GameGrid { public AndroidEx2() { super(8, 8, 0, RED); } public void main() { Fish nemo = new Fish(); addActor(nemo, new Location(1, 1)); doRun(); } } class Fish extends Actor { public Fish() { super("nemo"); } public void act() { move(); if (getX() == 7) { turn(180); setHorzMirror(true); } if (getX() == 0) { turn(180); setHorzMirror(false); } } } |
Erklärungen zum Programmcode:
getX() | Gibt die aktuelle Zellenkoordinate des Actors zurück |
setHorzMirror(true) |
Spiegelt das Spritebild hozontal |
setHorzMirror(false) |
Das Sprite-Bild ist nicht gespiegelt (default) |
Beispiel 2: Alle Zellen des Gitters durchlaufen / Hintergrundbild verwenden
Für den Hintergrund reef.gif verwendet. Da es grosse Unterschiede in der Displaygrösse bei verschiedenen Smartphone-Typen und Tablets gibt, empfiehlt sich einen Zellenzoom zu verwenden. Der Parameter cellZoom(cellsize) im Konstuktor der Applikationsklasse bewirkt eine automatische Skalierung des Hintergrundbildes und aller Sprite-Bilder.
|
![]() |
// AndroidEx3.java package app.ex3; import ch.aplu.android.*; public class AndroidEx3 extends GameGrid { public AndroidEx3() { super(8, 8, cellZoom(60), RED, "reef", false); } public void main() { Fish nemo = new Fish(); addActor(nemo, new Location(0, 0)); doRun(); } } class Fish extends Actor { public Fish() { super("nemo"); } public void act() { move(); if (getX() == 7) { turn(90); setHorzMirror(true); } if (getX() == 0) { turn(270); setHorzMirror(false); } } } |
super(8, 8, cellZoom(60), Color.RED, "reef", true) | Als Hintergrundbild wird reef.gif verwendet. Der Parameter cellZoom(60) bewirkt eine automatische Skalierung aller Sprite-Bilder. Das Bild nemo.gif ist ca. 55x55 Pixel gross, das Hintergrundbild 480x480 Pixel. Für das Smartphone oder Emulator werden die Bilder verkleinert, beim Tablet vergrössert |
Beispiel 3: Figur auf einer Kreisbahn bewegen / Drehbare Sprites
Damit sich das Auto auf einer Kreisbahn bewegt, muss bei jedem Schritt eine Drehung um einen kleinen Winkel erfolgen (turn(2.5)). Um das Spritebild vor jedem Schritt in die Fahrrichtung zu drehen, wird bei der Initialisierung des Cars der Parameter true eingefügt. super(true,"redcar") Der Parameter true bewirkt, dass die Richtung des Sprites fortlaufend berechnet und aktualisiert wird. Die Geschwindigkeit des Autos kann mit dem Lautstärke-Regler des Handys verändert werden.
| ![]() |
// AndroidEx4.java package app.ex4; import ch.aplu.android.*; public class AndroidEx4 extends GameGrid { public AndroidEx4() { super(300, 300, 1, 0, true); } public void main() { RedCar car = new RedCar(); addActor(car, new Location(150, 20)); doRun(); } } class RedCar extends Actor { public RedCar() { super(true,"redcar"); } public void act() { move(); turn(2.5); } } |
Erklärungen zum Programmcode:
super(300, 300, 1, 0, true) | Pixel-Auflösung, ohne Gitter mit aktivierter Navigation |
super(true,"redcar") | Drehbares Sprite |