GameDevWeek/Programmieren: Unterschied zwischen den Versionen
[gesichtete Version] | [gesichtete Version] |
Zeile 1: | Zeile 1: | ||
− | + | Es wird empfohlen, zunächst diesen Artikel zu lesen, anschließend im zugehörigen Quellcode zu stöbern und einen Blick in die Demos und Tests zu werfen. Ziel ist es, dass der Teilnehmer ein ungefähres Verständnis für die bestehenden Klassen und Zusammenhänge erhält. | |
− | |||
== 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. | ||
− | + | === Anforderungen an die IDE === | |
− | + | Es wird erwartet, dass die genutzte IDE folgende Anforderungen erfüllt: | |
− | |||
− | |||
− | === | ||
− | Es wird erwartet, dass | ||
* JDK 8 | * JDK 8 | ||
* Maven Unterstützung | * Maven Unterstützung | ||
− | * | + | * Projektspezifische Einstellungen: |
** UTF-8 Character Encoding | ** UTF-8 Character Encoding | ||
** 4 Whitespaces anstelle von Tabs | ** 4 Whitespaces anstelle von Tabs | ||
− | Im | + | Im Abschnitt[[GameDevWeek/Programmieren#Tutorials|Tutorials]] finden sich Hilfestellungen hierzu. |
− | === | + | === Git Tools === |
− | Diese verschleiern oft den Git Workflow und sorgen so für | + | 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 == | == Genutzte Technologien == | ||
− | === Framework & | + | === Framework & Codebase === |
− | Um nicht jeden Aspekt eines Spiels selber zu | + | 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] verwendet. |
− | |||
− | |||
+ | Zudem existieren eigene Klassen, die in der [https://github.com/Lusito/GameDevWeek CodeBase] zur Verfügung gestellt werden. | ||
=== Versionskontrolle === | === Versionskontrolle === | ||
− | + | 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 | + | * Git als Kommandozeilen Programm |
− | + | * [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, | + | 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 | + | 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 | + | 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 == | ||
Zeile 51: | Zeile 48: | ||
** [[GameDevWeek/CodeBase|Die CodeBase]] | ** [[GameDevWeek/CodeBase|Die CodeBase]] | ||
− | + | 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 60: | Zeile 57: | ||
== 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 | + | Im Folgenden sind Teilbereiche aufgelistet, die regelmäßig vorkommen. |
=== User Interface === | === 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ü ==== | ==== Menü ==== | ||
− | Hier besteht die Anforderung darin ein Menu und eine Menüstruktur zu implementieren. Dazu gehören | + | 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. | |
− | |||
=== 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. | |
− | |||
− | |||
=== 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 | ||
− | + | === 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 === | === 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 === | === 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 === | === 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 === | === 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 | ||
[[Kategorie:GameDevWeek]] | [[Kategorie:GameDevWeek]] |
Version vom 5. März 2015, 14:42 Uhr
Es wird empfohlen, zunächst diesen Artikel zu lesen, anschließend im zugehörigen Quellcode zu stöbern und einen Blick in die Demos und Tests zu werfen. Ziel ist es, dass der Teilnehmer ein ungefähres Verständnis für die bestehenden Klassen und Zusammenhänge erhält.
Inhaltsverzeichnis
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 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
- IDE für die GDW korrekt aufsetzen:
- Versioning:
- Sonstiges:
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.