Zum Abschluss dieser Serie von Artikeln über Java auf dem Raspberry Pi werden wir das JavaFX-Framework, das wir im vorherigen Artikel hinzugefügt haben, verwenden, um ein Spiel mit der FXGL-Bibliothek zu erstellen. Und wenn wir es auf dem Raspberry Pi ausführen, können wir ganz einfach physische Tasten und einen Joystick hinzufügen, um das Spiel zu steuern.
Dies ist nur ein Beispielprojekt, das auf dem Klassiker Snake (Abb. 1) basiert. Es bleibt also viel übrig, was Sie selbst hinzufügen können, um es mit weiteren Levels, Herausforderungen usw. zu erweitern. Auf diese Weise können Sie schnell loslegen und die FXGL-Bibliothek nach und nach erlernen.
Es gibt viele Kits, um diese Art von Projekt zu entwickeln. Wir werden ein Arcade-Kit (Abb. 2) in Kombination mit einem Picade X HAT USB-C (Abb. 3) verwenden. Der HAT ist optional, macht es aber viel einfacher, die Drähte der Tasten und des Joysticks anzuschließen. Ein weiterer Vorteil ist die Power-Taste am HAT. Wenn Sie den USB-Strom an den HAT statt an Ihren Raspberry Pi anschließen, haben Sie einen echten Powerknopf für das Board.
Der Bausatz enthält mehrere Knöpfe, aber für dieses Beispiel brauchen wir nur einen als Hack Button, um die Schlange mit einem Knopfdruck wachsen zu lassen, anstatt wirklich Nahrung zu fangen. Wir schließen diesen Knopf an den Anschluss 1 an, der mit GPIO 5 verbunden ist und sich am physikalischen Pin 29 des Raspberry Pi befindet. Die Pins des HATs sind auf [1] sehr gut erklärt und visualisiert.
Der Joystick enthält vier Drucktasten, die mit den in Abbildung 4 dargestellten Pins verbunden sind:
oben = GPIO 12
unten = GPIO 6
links = GPIO 20
rechts = GPIO 16
FXGL ist ein Framework, das auf JavaFX aufbaut, um Java-basierte Spiele zu entwickeln. Es wurde von Almas Baimagambetov, Senior Lecturer im Game Development an der University of Brighton, entwickelt. Das Projekt ist vollständig quelloffen und hat eine klare Beschreibung, wie Sie dazu beitragen können.
Sie fügen FXGL als Abhängigkeit zu Ihrem Java-Projekt hinzu und benötigen keine zusätzliche Installation oder Einrichtung. Es funktioniert auf allen Plattformen out of the box. Dank des einfachen und sauberen API kann die Erstellung von Spielen mit minimalem Code durchgeführt werden. Das Endergebnis kann als ein einziges ausführbares jar oder natives Image geliefert werden.
Grundlegende Beispiele sind Teil des GitHub-Hauptprojekts, und komplexere Spiele werden in einem separaten Projekt bereitgestellt. Neben 2D-Spielen kann es auch für Geschäftsanwendungen mit komplexen UI-Steuerungen und 3D-Schnittstellen verwendet werden (im Moment noch experimentell).
Der Code des fertigen Projekts ist im Pi4J-Projekt auf GitHub [2] verfügbar. Werfen wir einen Blick auf die verschiedenen Dateien, aber wie bei jedem guten Java-Projekt ist es weniger Code als Sie wahrscheinlich vermuten.
Die pom-Datei ist fast identisch mit der des vorherigen Artikels, aber da FXGL selbst bereits von JavaFX abhängt, müssen wir nur die FXGL-Abhängigkeit hinzufügen und können die javafx-controls-Abhängigkeit entfernen.
<dependency> <groupId>com.github.almasb</groupId> <artifactId>fxgl</artifactId> <version>${fxgl.version}</version> </dependency>
In diesem Snake-ähnlichen Spiel werden wir verschiedene Smiley-Bilder als Elemente der Schlange verwenden. FXGL lädt die Bilder standardmäßig aus dem Verzeichnis src/main/resources/assets/textures. Die verschiedenen Bilder sind hier als png-Dateien gespeichert (Abb. 5).
Alle Spielobjekte in einer FXGL-Anwendung sind vom Typ Entity und müssen in einer EntityFactory definiert werden. In diesem Beispiel heißt diese Klasse FxglExampleFactory.java.
In diesem Spiel benötigen wir drei Arten von Entities: den Kopf der Schlange, die Körperteile der Schlange und das Futter. Durch die Verwendung des entityBuilders und der Komponenten können wir diese Entities leicht initialisieren (Listing 1).
Listing 1
@Spawns("snakeHead") public Entity newSnakeHead(SpawnData data) { return entityBuilder(data) .type(SnakeType.SNAKE_HEAD) .viewWithBBox...