AndEngine Hello World
Ich zeige euch wie ihr schnell eine AndEngine Hello World App zusammenbaut. Diese kann euch als Basis für eure eigenen AndEngine App Projekte dienen. Mittlerweile gibt es ja bereits zahlreiche gute Bücher und Ebooks, mit denen man sehr schnell lernt wie man selber 2D Spiele und Programme mit der AndEngine erstellt.
AndEngine Hello World
Die Anleitung basiert auf meinem Tutorial zur Einrichtung der AndEngine unter Android Studio. Ich werde im Zuge des Artikels das Basisprojekt so erweitern, dass am Handy eine AndEngine App gestartet wird und eine einfache Ausgabe erzeugt wird. Die AndEngine Hello World App wird dabei eine leere Szene mit einem farbigen Hintergrund anzeigen.
Schritt 1: MainActivity finden
Aktuell solltet ihr eine leere Activity mit dem Namen MainActivity in Android Studio vorfinden. In der Projektansicht findet man diese unter: app/src/main/java/com.example.andenginetest/MainActivity und der Code dafür sollte so aussehen:
public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }
Das ist eine vom Wizard erstellte Standardactivity, die lediglich ein Layout lädt. Die AndEngine ist da noch nicht eingebunden. Diesen Code werden wir nun komplett ersetzen.
Schritt 2: MainActivity erbt von SimpleBaseGameActivity
Jedes Programm benötigt einen Einstiegspunkt. Das ist eine Funktion oder eine Klasse die als erstes ausgeführt oder initialisiert wird. Bei der AndEngine muss die MainActivity von einer der Basisklassen der Engine erben. Im einfachsten Fall ist das die SimpleBaseGameActivity. Wir erstellen nun also so eine Klasse und legen die drei zu überschreibenden Methoden an:
public class MainActivity extends SimpleBaseGameActivity { @Override public EngineOptions onCreateEngineOptions() { return null; } @Override protected void onCreateResources() { } @Override protected Scene onCreateScene() { return null; } }
Die angelegte Klasse würde so bereits kompilieren, hat aber noch keine Ausgabe. Für eine Basisausgabe benötigt man unter AndEngine 2 Dinge:
- eine Kamera
die Kamera ist der Viewpoint, als der Punkt von dem aus alle Elemente gerendert (gezeichnet) werden. Man benötigt immer zumindest eine aktive Kamera, alles was diese Kamera sieht wird am Display des Smartphones oder Tablets dargestellt. - eine Szene
die Szene ist ein Überbegriff. Alle sichtbaren und unsichtbaren Elemente befinden sich in einer Szene, quasi die eine Bühne im Theater. Elemente (zB Schauspieler, Kulissen, …) können sich auf der Bühne -> sichtbar, oder außerhalb davon -> unsichtbar bedingen. Ob Elemente sichtbar sind oder nicht ist abhängig von der Position der Kamera und wohin sie gerade schaut.
Schritt 3: Die Kamera
Die Kamera ist eines der wichtigsten Elemente jeder 2D oder 3D Engine. Wir legen für sie ein Camera Objekt in der Klasse an. Eine Kamera hat zwei Dimensionen, x und y oder Höhe und Breite. Die Engine ist so dynamisch, dass wir die Kamera definieren können wie wir wollen, AndEngine kümmert sich dann darum, dass das Bild möglichst gut am Bildschirm vom Gerät angezeigt wird. Wir können frei eine Breite und Höhe definieren, für die meisten aktuellen Geräte ist wohl 800×480 ein guter Wert.
private Camera camera; private static final int CAMERA_WIDTH = 800; private static final int CAMERA_HEIGHT = 480;
In der onCreateEngineOptions erstellen wir uns eine neue Kamera und definieren EngineOptions die wir als Rückgabewert zurückgeben.
@Override public EngineOptions onCreateEngineOptions() { camera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT); EngineOptions engineOptions = new EngineOptions(true, ScreenOrientation.LANDSCAPE_FIXED, new FillResolutionPolicy(), camera); return engineOptions; }
Fürs erste sollte ich erwähnen, dass man bei den EngineOptions aus den zwei üblichen Ausrichtungen des Geräts wählen kann. Die Optionen sind:
- ScreenOrientation.LANDSCAPE_FIXED
Das gerenderte Bild wird im Querformat angezeigt, Breite ist länger als Höhe - ScreenOrientation.PORTRAIT_FIXED
Das gerenderte Bild wird im Hochformat angezeigt, Breite ist kürzer als Höhe
Schritt 4: Die Szene
Das letzte nötige ist eine Szene. Eine Szene ist ein Container, in dem man alle Elemente die benötigt werden steckt. Elemente sind Grafiken, Texte, einfache geometrische Objekte, usw. Eine AndEngine App verwendet meist mehrere Szenen zwischen diesen man hin und her springen kann zum Beispiel ein Menü, eine Highscoreliste oder das eigentliche Spiel.
Wir erstellen uns eine leere Szene und setzen bei dieser Szene den Hintergrund. Dazu erzeugen wir mit new Background ein neues Background Objekt. Diesem geben wir die drei RGB Farbwerte – Werte jeweils von 0.0f bis 1.0f:
@Override protected Scene onCreateScene() { Scene scene = new Scene(); scene.setBackground(new Background(0.09804f, 0.6274f, 0.8784f)); return scene; }
Die Ausgabe der AndEngine Hello World App ist recht unspektakulär…
Das komplette Programm
Damit sind wir auch schon fertig, ich habe in meinen Codeauszügen die ganzen includes nicht gezeigt, deshalb der komplette Source Code der MainActivity:
import org.andengine.engine.camera.Camera; import org.andengine.engine.options.EngineOptions; import org.andengine.engine.options.ScreenOrientation; import org.andengine.engine.options.resolutionpolicy.FillResolutionPolicy; import org.andengine.entity.scene.Scene; import org.andengine.entity.scene.background.Background; import org.andengine.ui.activity.SimpleBaseGameActivity; public class MainActivity extends SimpleBaseGameActivity { private Camera camera; private static final int CAMERA_WIDTH = 800; private static final int CAMERA_HEIGHT = 480; @Override public EngineOptions onCreateEngineOptions() { camera = new Camera(0, 0, CAMERA_WIDTH, CAMERA_HEIGHT); EngineOptions engineOptions = new EngineOptions(true, ScreenOrientation.LANDSCAPE_FIXED, new FillResolutionPolicy(), camera); return engineOptions; } @Override protected void onCreateResources() { } @Override protected Scene onCreateScene() { Scene scene = new Scene(); scene.setBackground(new Background(0.09804f, 0.6274f, 0.8784f)); return scene; } }
Fazit
Wenn man das AndEngine Hello World Programm nun kompiliert und auf einem Android Gerät ausführt, dann sollte man eine schöne blaue Farbe sehen. Eine leere Szene mit einem von uns eingefärbten Hintergrund. In weiteren Artikeln werde ich euch zeigen wie man dieses rudimentäre Programm mit Elementen erweitert.
Wenn bei dir alles geklappt hat könntest du nun versuchen die Hintergrundfarbe zu ändern. Ändere die Werte der new Background Zeile, indem du dort drei Werte die zwischen 0.0f und 1.0f liegen einträgst.