GameDevWeek/Programmieren: Unterschied zwischen den Versionen

Aus /dev/null
Wechseln zu: Navigation, Suche
[gesichtete Version][gesichtete Version]
(Tutorials)
 
(13 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
== Allgemein ==
+
Dieser Artikel ist für Programmierer in der Java-Gruppe gedacht. Es wird empfohlen, den Artikel sorgsam zu lesen und anschließend die Tutorials in den Themengebieten zu bearbeiten, für die ein Interesse besteht.
Wir empfehlen erst einmal den Wikieintrag zu lesen, danach etwas im zugehörigen Quellcode zu stöbern und dann noch einen Blick in die Demos und Tests zu werfen! Das Ziel ist, dass ihr ein ungefähres Verständnis habt was es für Klassen und Zusammenhänge gibt. Manches davon wie Physik oder Rendering ist komplizierter, anderes wie Audio und Assets ist eher einfacher zu verstehen.
+
 
 +
Weiterhin empfiehlt es sich, die Struktur von [https://github.com/GameDevWeek/GDW-2012-SS/tree/master/gdx-sotf/src/main/java/de/hochschuletrier/gdw/ss12 Code] und [https://github.com/GameDevWeek/GDW-2012-SS/tree/master/gdx-sotf/src/main/resources/data Assets] des Spiels Survival of the Fattest anzuschauen, welche als Guideline für alle GDW-Projekte gilt.
 +
Um bereits im Vorraus zu experimentieren, kann der Code des [https://github.com/GameDevWeek/CodeBase Master Branches] ausgecheckt/geforkt werden. Es wird ein [http://www.gamedev.net/page/resources/_/technical/game-programming/understanding-component-entity-systems-r3013 Entity Component System] ''(ECS)'' namens [https://github.com/libgdx/ashley/wiki Ashley] verwendet. Jeder Programmierer sollte zumindest die [http://www.gamedev.net/page/resources/_/technical/game-programming/understanding-component-entity-systems-r3013 Grundidee] eines ECS verstanden haben.
  
 
== Entwicklungsumgebung ==
 
== Entwicklungsumgebung ==
 +
Als Entwicklungsumgebung werden Eclipse und NetBeans unterstützt. Für jede der beiden IDEs wird es fertige Bundles geben, die alle benötigten Plugins und Voreinstellungen beinhalten.
 +
Sollte eine bereits installierte IDE genutzt werden wollen, muss zunächst sichergestellt werden, dass die nötigen Plugins installiert und konfiguriert sind.
 +
Sollte eine andere IDE genutzt werden wollen, kann im Problemfall kein umfassender Support garantiert werden.
  
Als Entwicklungsumgebung werden wir Eclipse und NetBeans unterstützen. Für beide wird es fertige Bundles geben, die alle benötigten Plugins und Voreinstellungen beinhalten.
+
=== Anforderungen an die IDE ===
Solltet ihr eure bereits installierte IDE nutzen wollen, stellt bitte sicher, dass ihr die nötigen Plugins installiert und konfiguriert habt.
+
Es wird erwartet, dass die genutzte IDE folgende Anforderungen erfüllt:
Solltet ihr eine andere IDE nutzen wollen so können wir euch nicht 100% versprechen euch helfen zu können, sollten Probleme auftreten. In diesem Fall solltet ihr eure IDE selbst gut kennen ;)
 
 
 
=== Erwartete Einstellungen und Plugins ===
 
Es wird erwartet, dass eure IDE folgendes Setup bietet:
 
 
* JDK 8
 
* JDK 8
 
* Maven Unterstützung
 
* Maven Unterstützung
* Settings:
+
* Projektspezifische Einstellungen:
 
** UTF-8 Character Encoding
 
** UTF-8 Character Encoding
 
** 4 Whitespaces anstelle von Tabs
 
** 4 Whitespaces anstelle von Tabs
  
Im Punkt [[GameDevWeek/Programmieren#Tutorials|Tutorials]] gibt es Hilfestellungen hierzu!
+
Im Abschnitt[[GameDevWeek/Programmieren#Tutorials|Tutorials]] finden sich Hilfestellungen hierzu.
  
=== Nutzt in keinem Fall die eingebauten Plugins für Git!===
+
=== Git Tools ===
Diese verschleiern oft den Git Workflow und sorgen so für Verständnisprobleme.
+
Jede moderne IDE beinhaltet eingebettete Tools zur Unterstützung der Versionsverwaltung Git ''(EGit u.A.)''. Diese verschleiern oft den Git Workflow und sorgen so für Verständnis- und Technikproblemen.
Zudem gibt es hier oft andere Probleme mit denen wir euch nicht helfen können.
 
  
 
== Genutzte Technologien ==
 
== Genutzte Technologien ==
=== Framework & CodeBase ===
+
=== Framework & Codebase ===
Um nicht jeden Aspekt eines Spiels selber zu schreiben und uns somit auf das Spiel konzentrieren zu können nutzen wir das Java Spiele Framework [http://libgdx.badlogicgames.com/ LibGDX].
+
Um nicht jeden Aspekt eines Spiels selber zu implementieren und sich somit auf die Entwicklung des Spiels konzentrieren zu können, wird das Java-Spieleframework [http://libgdx.badlogicgames.com/ LibGDX] in Kombination mit dem ECS [https://github.com/libgdx/ashley/wiki Ashley] (auch von LibGDX) verwendet.
 
 
Zudem haben wir eigene Klassen geschrieben, die wir in der [https://github.com/Lusito/GameDevWeek CodeBase] zur Verfügung stellen.
 
  
 +
Zudem existieren eigene Klassen, die in der [https://github.com/GameDevWeek/CodeBase/wiki Codebase] zur Verfügung gestellt werden.
 
=== Versionskontrolle ===
 
=== Versionskontrolle ===
  
Zur Versionsontrolle setzen wir Git ein. Dazu wird es auf [http://www.github.com/ Github] ein Repository geben zu dem jeder Teilnehmer Zugriff bekommt. Das bedeutet jeder Programmierer benötigt '''einen Github Account'''. Solltet ihr noch überhaupt keine Ahnung von Versionskontrolle habe, dann lest euch die Dokumentation auf der [http://git-scm.com/ Git Homepage] durch. Zumindest das Prinzip und das Ziel eines solchen Systems solltet ihr schonmal gehört haben. Die eigentliche Benutzung ist dann relativ einfach und mit wenigen (aber bitte durchdachten! ) Klicks erledigt. Während der GDW stehen euch die Organisatoren hier natürlich zur Seite!
+
Als Versionsontrolle wird Git eingesetzt. Dazu wird es auf [http://www.github.com/ GitHub] ein Repository geben zu dem jeder Teilnehmer Zugriff erhält. Das bedeutet jeder Programmierer benötigt '''einen Account auf github.com'''. Sollten keine rudimentären Kenntnisse zur verwendung einer Versionskontrolle vorhanden sein, wird darum gebeten die Dokumentation auf der [http://git-scm.com/ Git Homepage] zurate zu ziehen. Im Mindestens das Prinzip und das Ziel eines solchen Systems solltet in Grundzügen verstanden werden.
 +
Die Verwendung des Programms Git beschränkt sich meist auf wenige, einfache Konsolenbefehle. Während der GDW stehen die Organisatoren für Fragen zur Verfügung.
  
 
Es stehen euch zwei Möglichkeiten bereit Git zu nutzen:
 
Es stehen euch zwei Möglichkeiten bereit Git zu nutzen:
* [http://www.sourcetreeapp.com/ SourceTree] als Einsteigerfreundliche GUI
+
* Git als Kommandozeilen Programm
* Commandline für die Erfahrenen unter euch. Nutzt dies nur wenn ihr euch damit wirklich auskennt!
+
* [http://www.sourcetreeapp.com SourceTree] ''(als "Einsteigerfreundliche" GUI)''
  
 
=== Build System ===
 
=== Build System ===
Um die Abhängigkeiten für Java, Libgdx und andere benötigte Bibliotheken einfach zu verwalten, werden wir Maven verwenden. Maven benötigt nur eine Datei mit dem Namen “pom.xml” und lädt dann dynamisch die nötigen Bibliotheken aus zentralen Repositories. Damit müssen wir keine Libraries mehr mit Git synchronisieren.
+
Um die Abhängigkeiten für Java, Libgdx und andere benötigte Bibliotheken einfach zu verwalten, wird Maven verwenden. Maven benötigt lediglich eine Datei mit dem Namen "pom.xml" und lädt auf deren Basis dynamisch die nötigen Bibliotheken aus zentralen Repositories. Auf diese Art und Weise müssen keine Libraries über Git synchronisiert werden.
  
NetBeans kann Maven Projekte als solche Laden. Bei Eclipse wird ein Plugin ([http://www.eclipse.org/m2e/ m2eclipse]) benötigt, welches das Maven Projekt in ein Eclipse Projekt konvertiert.
+
NetBeans kann Maven Projekte von Haus aus laden. Eclipse benötigt das Plugin "''([http://www.eclipse.org/m2e/ m2eclipse])''", welches das Maven Projekt in ein Eclipse Projekt konvertiert.
Nach der Installation könnt ihr über “Import->Maven” ein solches Projekt importieren. Die Abhängigkeiten werden dann direkt heruntergeladen und in das Projekt integriert.
+
Nach der Installation kann über "Import -> Maven" ein solches Projekt importiert werden. Die Abhängigkeiten werden dann heruntergeladen und in das Projekt integriert.
  
 
== Tutorials ==
 
== Tutorials ==
 +
* [[GameDevWeek/Poolrechner|Aufsetzen auf dem Poolrechner]]
 
* IDE für die GDW korrekt aufsetzen:
 
* IDE für die GDW korrekt aufsetzen:
 
** [[GameDevWeek/NetBeans|NetBeans]]
 
** [[GameDevWeek/NetBeans|NetBeans]]
 
** [[GameDevWeek/Eclipse|Eclipse]]
 
** [[GameDevWeek/Eclipse|Eclipse]]
 
* Versioning:
 
* Versioning:
 +
** [http://buildamodule.com/video/change-management-and-version-control-deploying-releases-features-and-fixes-with-git-how-to-use-a-scalable-git-branching-model-called-gitflow How to use a scalable Git branching model called Gitflow]
 
** [[GameDevWeek/SourceTree|SourceTree Einführung]]
 
** [[GameDevWeek/SourceTree|SourceTree Einführung]]
 +
** [https://github.com/nvie/gitflow Git Flow für die Kommandozeile]
 +
** [https://github.com/GameDevWeek/Conflict-Test Konflikt-Lösung Übungsaufgabe]
 +
** [https://cloud.fsi.hochschule-trier.de/index.php/s/g47mwE93s0PXAbE Git Vortragsfolien]
 
* Sonstiges:
 
* Sonstiges:
** [[GameDevWeek/CodeBase|Die CodeBase]]
+
** [https://github.com/GameDevWeek/CodeBase/wiki Die Codebase]
  
Hier sind noch einige externe Tutorials zu LibGDX:
+
Einige externe Tutorials zu LibGDX:
  
 
* [https://github.com/libgdx/libgdx/wiki/A-simple-game A simple game]
 
* [https://github.com/libgdx/libgdx/wiki/A-simple-game A simple game]
Zeile 57: Zeile 62:
 
* [https://code.google.com/p/libgdx/wiki/VideoTutorials ältere Tutorial videos]
 
* [https://code.google.com/p/libgdx/wiki/VideoTutorials ältere Tutorial videos]
 
* [http://steigert.blogspot.de/2012/02/1-libgdx-tutorial-introduction.html steigert blog]
 
* [http://steigert.blogspot.de/2012/02/1-libgdx-tutorial-introduction.html steigert blog]
 +
* [https://github.com/libgdx/ashley/wiki Ashley Tutorials]
  
 
== Themengebiete ==
 
== Themengebiete ==
 
Als Programmierer arbeitet man in der Regel in einem Teilbereich zusammen mit anderen Programmierern.
 
Als Programmierer arbeitet man in der Regel in einem Teilbereich zusammen mit anderen Programmierern.
Im folgenden sind Teilbereiche aufgelistet, die regelmäßig vorkommen.
+
Im Folgenden sind Teilbereiche aufgelistet, die regelmäßig vorkommen.
  
 
=== User Interface ===
 
=== User Interface ===
  
==== Heads Up Display ====
+
==== Head-up-Display ====
Ihr visualisert die Informationen aus den Klassen der Spielwelt. Ihr entscheidet über das Layout und die Widgets mit denen etwas dargestellt wird. Manche davon sind bereits etabliert wie Label, Listen oder Slider. Andere wie bspw eine Minimap müssen selbst umgesetzt werden.
+
Es werden die Informationen aus den Klassen der Spielwelt visualisert. Es muss über das Layout und die Widgets mit denen etwas dargestellt wird entschieden werden. Manche davon sind bereits etabliert wie Label, Listen oder Slider. Andere wie z.B. eine Minimap müssen selbst umgesetzt werden.
  
 
==== Menü ====
 
==== Menü ====
Hier besteht die Anforderung darin ein Menu und eine Menüstruktur zu implementieren. Dazu gehören bspw ein Splashscreen zu Beginn, ein Startscreen, Serverbrowser, Charakterauswahl und ähnliches. Ihr kümmert euch auch um den Input während das Menü angezeigt wird. Dazu müsst ihr Maus und Tastatureingaben verarbeiten.
+
Hier besteht die Anforderung darin, ein Menu und eine Menüstruktur zu implementieren. Dazu gehören beispielsweise ein Splashscreen, ein Startscreen, Serverbrowser, Charakterauswahl und Ähnliches. Es wird sich auch mit den Input für die Menüs beschäftigt. Dazu müssen Maus und Tastatureingaben verarbeitet werden.
  
 
=== Assetverwaltung ===
 
=== Assetverwaltung ===
 
+
Die Aufgabe in diesem Bereich ist es, alle nötigen Mediendateien des Spiels zu laden und zu verwalten. Dazu gehören Texturen, Audiofiles, Schriftarten, Mapdateien, Einstellungen und Ähnliches. Es wird sich damit auseinandergesetzt, zu welchem Zeitpunkt welche Assets geladen werden müssen. Um speicherfreundlich zu arbeiten sollten nicht immer alle Assets des Spiels im Speicher gehalten werden. Es wird eine Schnittstelle geschaffen, die viele andere Gruppen nutzen. Aus diesem Grund muss sichergestellt werden, dass alle Mitarbeiter bequem auf die Assets zugreifen können.
Eure Aufgabe ist es alle nötigen Mediendateien des Spiels zu laden und zu verwalten. Dazu gehören Texturen, Audiofiles, Schriftarten, Mapdateien, Settings und ähnliches. Ihr setzt euch damit auseinander wann welche Assets geladen werden müssen. Um speicherfreundlich zu arbeiten sollten nicht immer alle Assets im Speicher gehalten werden. Ihr erschafft also die Schnittstelle für Assets die viele andere Gruppen nutzen werden und müsst sicherstellen, dass jeder bequem auf die Assets zugreifen kann.
 
  
 
=== Audio ===
 
=== Audio ===
 
+
Das Audioteam bringt den Ton ins Spiel. Es verwaltet alle laufenden Sounds und achtet darauf, dass nicht zu viele Geräusche gleichzeitig abgespielt, geladen oder gestreamt werden. Je nach Spielsituation werden die Sounds auch verändert werden.
Euer Team bring den Ton ins Spiel. Ihr verwaltet alle laufenden Sounds und achtet darauf dass nicht zuviele abgespielt, geladen oder gestreamt werden. Je nach Spielsituation werden die Sounds auch verändert werden.
 
 
 
  
 
=== Input ===
 
=== Input ===
 +
Das Inputteam verarbeitet jegliche Benutzereingabe während des laufenden Spiels. Es verarbeitet Tastatur-, Maus-, Touchpad- und Controllereingaben und leitet diese an die Spielobjekte weiter, um die zugehörigen Aktionen auszulösen. Es beschäftigt sich weiter mit verschiedenen Tastaturbelegungen und mit der Unterstützung verschiedener Controllertypen
  
Euer Team verarbeitet jeden Input während des laufenden Spiels. Ihr verarbeitet Tastatur, Maus, Touchpad und Controllereingaben und leitet diese an die Spielobjekte weiter um die zugehörigen Aktionen auszulösen. Ihr kümmert euch um verschiedene Tastaturbelegungen und darum verschiedene Controllertypen zu unterstützen.
+
=== Spielelogik ===
 
+
Die Aufgabe der Spielelogik-Abteilung ist die Implementierung des Grundgerüstes für das Spiel. Sie implementiert die zentralen Klassen und Schnittstellen für alle anderen Teams. Im Wesentlichen setzt sie alle Objekte der Spielwelt mit ihrer Funktionalität um. Dazu gehören z.B. der Spieler, die NPCs und die Items, sowie interaktive Elemente wie Türen und Schranken ''(Spielmechaniken)''
 
 
=== Gamelogik ===
 
 
 
Eure Aufgabe ist das Grundgerüst für das Spiel zu implementieren. Ihr implementiert die zentrale Klasse und Schnittstelle für alle anderen Teams. Hauptsächlich setzt ihr alle Objekte der Spielwelt mit ihrer Funktionalität um. Dazu gehören bspw der Spieler, die Gegner und Items. Oder auch interaktive Mapelemente wie Türen und Schranken. Ihr setzt also die Spielmechaniken um.
 
  
 
=== Rendering ===
 
=== Rendering ===
 
+
Diese Abteilung beschäftigt sich mit dem Zeichnen der Welt, den Spielern, Entities, Animationen. Partikeleffekte und Shader benötigen hierbei besondere Aufmerksamkeit. Oft kann durch visuelles Feedback der Spielspaß stark gesteigert werden.
Eure Aufgabe ist das Zeichnen von der Welt, den Spielern, Entities, etc. Animationen, Partikeleffekte und Shader benötigen b3esondere Aufmerksamkeit. Ihr seid für den WOW Effekt zuständig. Oft kann man durch visuelles Feedback den Spielspaß stark erhöhen.
 
  
 
=== Physik ===
 
=== Physik ===
 
+
Das Physikteam beschäftigt sich mit der Anbindung der Physikengine "Box2D". Dazu existiert bereits einen Wrapper in LibGDX. Es sorgt dafür, dass die Spielobjekte eine Repräsentation in der Physiksimulation erhalten. Dazu gehören einerseits Form, Masse, Dichte und Reibung eines Objekts, andererseits müssen diese Objekte aktiviert, deaktiviert, bewegt und verändert werden können. Dazu ist ein genaueres Verständnis der Physikengine notwendig. Außerdem wird sichergestellt, dass die Spielobjekte korrekt mit der Physiksimulation synchronisiert werden, damit Grafik und Physik nicht divergieren.
Euer Team beschäftigt sich damit die Physikengine Box2D anzubinden. Dazu gibt es bereits einen Wrapper in Libgdx. Ihr kümmert euch darum den Spielobjekten eine Repräsentation in der Physikimulation zu geben. Dazu gehören einerseits Form, Masse, Dichte und Reibung eines Objekts. Andererseits müssen diese Objekte aktiviert, deaktiviert, bewegt und verändert werden können. Dazu ist ein genaueres Verständnis der Physikengine notwendig. Außerdem stellt ihr sicher, dass die Spielobjekte korrekt mit der Physiksimulation synchronisiert werden, damit Grafik und Physik sich nicht unterscheiden.
 
  
 
=== Netzwerk ===
 
=== Netzwerk ===
 
+
Die Aufgabe des Netzwerkteams ist es, die Spieldaten im Netzwerk zu synchronisieren. Damit sich das Spiel auf jedem Client im selben Status befindet, müssen ausgewählte Daten ständig synchronisiert werden. Es wird sich mit Timing und Umfang dieser Datenpakete auseinandergesetzt. Weiter muss ein Client-Server Konzept integriert werden, was aufgrund der starken Verknüpfung mit den Aufgabenbereichen anderer Teams eine empfindliche Aufgabe darstellt.
Eure Aufgabe ist es die Spieldaten im Netzwerk synchron zu halten. Damit das Spiel in jedem Client das selbe ist, müssen ausgewählte Daten ständig synchronisiert werden. Ihr setzt euch mit Timing und Umfang dieser Datenpakete auseinander. Außerdem müsst ihr ein Client-Server Konzept integrieren. Dieses Aufgabengebiet berührt sehr viele andere Teams und erfordert viel Absprache.
 
  
 
=== Künstliche Intelligenz ===
 
=== Künstliche Intelligenz ===
 
+
Sollte im Spiel eine künstliche Intelligenz erforderlich sein, wird auch hierfür ein Team gebildet. Dieses beschäftigt sich mit Handlungsbabläufen für beispielsweise Bots. Dazu wird es eine eigene Implementierung eines Behaviour Trees geben, mit dessen Hilfe die NPCs auf Grundlage der aktuellen Spielsituation gesteuert werden.
Sollte es im Spiel irgendeine Art von künstlicher Intelligenz geben, dann wird auch hierfür ein Team gebildet. Ihr beschäftigt euch mit Handlungsbabläufen wie beispielsweise bei Bots. Dazu wird es eine eigene Implementierung eines Behaviour Trees geben. Ihr müsst auf Grundlage der Spielsituation die computergesteuerten Spieler steuern.
 
  
 
[[Kategorie:GameDevWeek]]
 
[[Kategorie:GameDevWeek]]

Aktuelle Version vom 13. März 2016, 06:55 Uhr

Dieser Artikel ist für Programmierer in der Java-Gruppe gedacht. Es wird empfohlen, den Artikel sorgsam zu lesen und anschließend die Tutorials in den Themengebieten zu bearbeiten, für die ein Interesse besteht.

Weiterhin empfiehlt es sich, die Struktur von Code und Assets des Spiels Survival of the Fattest anzuschauen, welche als Guideline für alle GDW-Projekte gilt. Um bereits im Vorraus zu experimentieren, kann der Code des Master Branches ausgecheckt/geforkt werden. Es wird ein Entity Component System (ECS) namens Ashley verwendet. Jeder Programmierer sollte zumindest die Grundidee eines ECS verstanden haben.

Entwicklungsumgebung

Als Entwicklungsumgebung werden Eclipse und NetBeans unterstützt. Für jede der beiden IDEs wird es fertige Bundles geben, die alle benötigten Plugins und Voreinstellungen beinhalten. Sollte eine bereits installierte IDE genutzt werden wollen, muss zunächst sichergestellt werden, dass die nötigen Plugins installiert und konfiguriert sind. Sollte eine andere IDE genutzt werden wollen, kann im Problemfall kein umfassender Support garantiert werden.

Anforderungen an die IDE

Es wird erwartet, dass die genutzte IDE folgende Anforderungen erfüllt:

  • JDK 8
  • Maven Unterstützung
  • Projektspezifische Einstellungen:
    • UTF-8 Character Encoding
    • 4 Whitespaces anstelle von Tabs

Im AbschnittTutorials finden sich Hilfestellungen hierzu.

Git Tools

Jede moderne IDE beinhaltet eingebettete Tools zur Unterstützung der Versionsverwaltung Git (EGit u.A.). Diese verschleiern oft den Git Workflow und sorgen so für Verständnis- und Technikproblemen.

Genutzte Technologien

Framework & Codebase

Um nicht jeden Aspekt eines Spiels selber zu implementieren und sich somit auf die Entwicklung des Spiels konzentrieren zu können, wird das Java-Spieleframework LibGDX in Kombination mit dem ECS Ashley (auch von LibGDX) verwendet.

Zudem existieren eigene Klassen, die in der Codebase zur Verfügung gestellt werden.

Versionskontrolle

Als Versionsontrolle wird Git eingesetzt. Dazu wird es auf GitHub ein Repository geben zu dem jeder Teilnehmer Zugriff erhält. Das bedeutet jeder Programmierer benötigt einen Account auf github.com. Sollten keine rudimentären Kenntnisse zur verwendung einer Versionskontrolle vorhanden sein, wird darum gebeten die Dokumentation auf der Git Homepage zurate zu ziehen. Im Mindestens das Prinzip und das Ziel eines solchen Systems solltet in Grundzügen verstanden werden. Die Verwendung des Programms Git beschränkt sich meist auf wenige, einfache Konsolenbefehle. Während der GDW stehen die Organisatoren für Fragen zur Verfügung.

Es stehen euch zwei Möglichkeiten bereit Git zu nutzen:

  • Git als Kommandozeilen Programm
  • SourceTree (als "Einsteigerfreundliche" GUI)

Build System

Um die Abhängigkeiten für Java, Libgdx und andere benötigte Bibliotheken einfach zu verwalten, wird Maven verwenden. Maven benötigt lediglich eine Datei mit dem Namen "pom.xml" und lädt auf deren Basis dynamisch die nötigen Bibliotheken aus zentralen Repositories. Auf diese Art und Weise müssen keine Libraries über Git synchronisiert werden.

NetBeans kann Maven Projekte von Haus aus laden. Eclipse benötigt das Plugin "(m2eclipse)", welches das Maven Projekt in ein Eclipse Projekt konvertiert. Nach der Installation kann über "Import -> Maven" ein solches Projekt importiert werden. Die Abhängigkeiten werden dann heruntergeladen und in das Projekt integriert.

Tutorials

Einige externe Tutorials zu LibGDX:

Themengebiete

Als Programmierer arbeitet man in der Regel in einem Teilbereich zusammen mit anderen Programmierern. Im Folgenden sind Teilbereiche aufgelistet, die regelmäßig vorkommen.

User Interface

Head-up-Display

Es werden die Informationen aus den Klassen der Spielwelt visualisert. Es muss über das Layout und die Widgets mit denen etwas dargestellt wird entschieden werden. Manche davon sind bereits etabliert wie Label, Listen oder Slider. Andere wie z.B. eine Minimap müssen selbst umgesetzt werden.

Menü

Hier besteht die Anforderung darin, ein Menu und eine Menüstruktur zu implementieren. Dazu gehören beispielsweise ein Splashscreen, ein Startscreen, Serverbrowser, Charakterauswahl und Ähnliches. Es wird sich auch mit den Input für die Menüs beschäftigt. Dazu müssen Maus und Tastatureingaben verarbeitet werden.

Assetverwaltung

Die Aufgabe in diesem Bereich ist es, alle nötigen Mediendateien des Spiels zu laden und zu verwalten. Dazu gehören Texturen, Audiofiles, Schriftarten, Mapdateien, Einstellungen und Ähnliches. Es wird sich damit auseinandergesetzt, zu welchem Zeitpunkt welche Assets geladen werden müssen. Um speicherfreundlich zu arbeiten sollten nicht immer alle Assets des Spiels im Speicher gehalten werden. Es wird eine Schnittstelle geschaffen, die viele andere Gruppen nutzen. Aus diesem Grund muss sichergestellt werden, dass alle Mitarbeiter bequem auf die Assets zugreifen können.

Audio

Das Audioteam bringt den Ton ins Spiel. Es verwaltet alle laufenden Sounds und achtet darauf, dass nicht zu viele Geräusche gleichzeitig abgespielt, geladen oder gestreamt werden. Je nach Spielsituation werden die Sounds auch verändert werden.

Input

Das Inputteam verarbeitet jegliche Benutzereingabe während des laufenden Spiels. Es verarbeitet Tastatur-, Maus-, Touchpad- und Controllereingaben und leitet diese an die Spielobjekte weiter, um die zugehörigen Aktionen auszulösen. Es beschäftigt sich weiter mit verschiedenen Tastaturbelegungen und mit der Unterstützung verschiedener Controllertypen

Spielelogik

Die Aufgabe der Spielelogik-Abteilung ist die Implementierung des Grundgerüstes für das Spiel. Sie implementiert die zentralen Klassen und Schnittstellen für alle anderen Teams. Im Wesentlichen setzt sie alle Objekte der Spielwelt mit ihrer Funktionalität um. Dazu gehören z.B. der Spieler, die NPCs und die Items, sowie interaktive Elemente wie Türen und Schranken (Spielmechaniken)

Rendering

Diese Abteilung beschäftigt sich mit dem Zeichnen der Welt, den Spielern, Entities, Animationen. Partikeleffekte und Shader benötigen hierbei besondere Aufmerksamkeit. Oft kann durch visuelles Feedback der Spielspaß stark gesteigert werden.

Physik

Das Physikteam beschäftigt sich mit der Anbindung der Physikengine "Box2D". Dazu existiert bereits einen Wrapper in LibGDX. Es sorgt dafür, dass die Spielobjekte eine Repräsentation in der Physiksimulation erhalten. Dazu gehören einerseits Form, Masse, Dichte und Reibung eines Objekts, andererseits müssen diese Objekte aktiviert, deaktiviert, bewegt und verändert werden können. Dazu ist ein genaueres Verständnis der Physikengine notwendig. Außerdem wird sichergestellt, dass die Spielobjekte korrekt mit der Physiksimulation synchronisiert werden, damit Grafik und Physik nicht divergieren.

Netzwerk

Die Aufgabe des Netzwerkteams ist es, die Spieldaten im Netzwerk zu synchronisieren. Damit sich das Spiel auf jedem Client im selben Status befindet, müssen ausgewählte Daten ständig synchronisiert werden. Es wird sich mit Timing und Umfang dieser Datenpakete auseinandergesetzt. Weiter muss ein Client-Server Konzept integriert werden, was aufgrund der starken Verknüpfung mit den Aufgabenbereichen anderer Teams eine empfindliche Aufgabe darstellt.

Künstliche Intelligenz

Sollte im Spiel eine künstliche Intelligenz erforderlich sein, wird auch hierfür ein Team gebildet. Dieses beschäftigt sich mit Handlungsbabläufen für beispielsweise Bots. Dazu wird es eine eigene Implementierung eines Behaviour Trees geben, mit dessen Hilfe die NPCs auf Grundlage der aktuellen Spielsituation gesteuert werden.