385
Bearbeitungen
Änderungen
Die Seite wurde neu angelegt: „== Allgemein == Als Programmierer arbeitet man in der Regel in einem Teilbereich zusammen mit anderen Programmierern. Im folgenden sind Teilbereiche aufgeliste…“
== Allgemein ==
Als Programmierer arbeitet man in der Regel in einem Teilbereich zusammen mit anderen Programmierern. Im folgenden sind Teilbereiche aufgelistet mit einer Auflistung welche Klassen man sich dazu mal anschauen sollte. Je nach dem für welches Aufgabengebiet ihr euch interessiert, solltet ihr euch die angegeben Klassen und Packages einmal anschauen. Außerdem empfehlen wir auch sehr das Libgdx Wiki und deren Demoprogramme sowie Libgdx Tests. 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.
== Entwicklungsumgebung ==
Unsere Entwicklungsumgebung wird Eclipse sein. Wir werden euch ein fertiges Eclipse Bundle anbieten, das alle Plugins und das voreingestellte Projekte beinhaltet. Solltet ihr euer bereits installiertes Eclipse nutzen wollen, stellt bitte sicher, dass ihr die nötigen Plugins installiert und konfiguriert. 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 ;)
== Versionskontrolle und Build System ==
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!
Um Git zu nutzen stehen euch 2 Möglichkeiten zur Verfügung. Einmal könnt ihr das mittlerweile in Eclipse integrierte Plugin EGit benutzen. Dazu müsst ihr unter “Window-> Open Perspective” nur die “Git Repository Exploring” View öffnen. Nähere Informationen findet ihr auf der [https://www.eclipse.org/egit/ EGit Homepage]. Oder falls ihr es etwas ausführlicher wollt gibt es die standalone GUI [https://code.google.com/p/gitextensions/ Git Extensions]. Wir empfehlen die standalone Version. Hier habt ihr deutlich mehr Überblick über den Ablauf!
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. Für Maven gibt es bereits das Eclipse Plugin [http://www.eclipse.org/m2e/ m2eclipse]. 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.
== Beispielcode ==
=== Libgdx ===
Um euch den Einstieg etwas zu erleichtern und schonmal funktionierenden Code zu sehen, solltet ihr das Libgdx Repository herunterladen. Am besten klont ihr das Git Repository. So könnt ihr schonmal mit Git üben. Der ganze Prozess ist bereits im Libgdx Wiki beschrieben. Also folgt bitte [https://github.com/libgdx/libgdx/wiki/Running-demos-%26-tests dieser Anleitung]. Das Klonen des Repositories müsst ihr natürlich nicht auf der Konsole machen sondern mit dem Eclipse Plugin oder der Git Extensions-GUI!
Sobald ihr alles heruntergeladen und importiert habt erscheinen erstmal sehr viele neue Projekte in Eclipse. Ihr habt jetzt wirklich das komplette Libgdx Projekt inklusive Game engine, backends, utilities,tests und demos. Sollten davon einige Fehler haben liegt das wahrscheinlich daran, dass euch die Android Development Bibliotheken fehlen. Das ist nicht schlimm, ihr könnt die Desktopversion trotzdem ausführen.
Hier sind noch einige andere Links zu Tutorials:
* [https://github.com/libgdx/libgdx/wiki/A-simple-game A simple game]
* [https://github.com/libgdx/libgdx/wiki/The-application-framework Libgdx Application framework]
* [https://code.google.com/p/libgdx/wiki/VideoTutorials ältere Tutorial videos]
* [http://steigert.blogspot.de/2012/02/1-libgdx-tutorial-introduction.html steigert blog]
=== GDW Bibliothek ===
Einige Dinge sind während der letzen GDWs entstanden, die wiederverwendet werden können. Code für die Netzkommunikation, ein Box2DWrapper, Asset Loader und andere Helferklassen findet ihr darin. Wir werden das dann auch im Git Repository ablegen.
== Themen ==
=== User Interface ===
==== Heads 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.
==== 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.
=== Assetverwaltung ===
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 ===
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 ===
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.
=== 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 ===
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 ===
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 ===
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 ===
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.
Als Programmierer arbeitet man in der Regel in einem Teilbereich zusammen mit anderen Programmierern. Im folgenden sind Teilbereiche aufgelistet mit einer Auflistung welche Klassen man sich dazu mal anschauen sollte. Je nach dem für welches Aufgabengebiet ihr euch interessiert, solltet ihr euch die angegeben Klassen und Packages einmal anschauen. Außerdem empfehlen wir auch sehr das Libgdx Wiki und deren Demoprogramme sowie Libgdx Tests. 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.
== Entwicklungsumgebung ==
Unsere Entwicklungsumgebung wird Eclipse sein. Wir werden euch ein fertiges Eclipse Bundle anbieten, das alle Plugins und das voreingestellte Projekte beinhaltet. Solltet ihr euer bereits installiertes Eclipse nutzen wollen, stellt bitte sicher, dass ihr die nötigen Plugins installiert und konfiguriert. 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 ;)
== Versionskontrolle und Build System ==
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!
Um Git zu nutzen stehen euch 2 Möglichkeiten zur Verfügung. Einmal könnt ihr das mittlerweile in Eclipse integrierte Plugin EGit benutzen. Dazu müsst ihr unter “Window-> Open Perspective” nur die “Git Repository Exploring” View öffnen. Nähere Informationen findet ihr auf der [https://www.eclipse.org/egit/ EGit Homepage]. Oder falls ihr es etwas ausführlicher wollt gibt es die standalone GUI [https://code.google.com/p/gitextensions/ Git Extensions]. Wir empfehlen die standalone Version. Hier habt ihr deutlich mehr Überblick über den Ablauf!
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. Für Maven gibt es bereits das Eclipse Plugin [http://www.eclipse.org/m2e/ m2eclipse]. 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.
== Beispielcode ==
=== Libgdx ===
Um euch den Einstieg etwas zu erleichtern und schonmal funktionierenden Code zu sehen, solltet ihr das Libgdx Repository herunterladen. Am besten klont ihr das Git Repository. So könnt ihr schonmal mit Git üben. Der ganze Prozess ist bereits im Libgdx Wiki beschrieben. Also folgt bitte [https://github.com/libgdx/libgdx/wiki/Running-demos-%26-tests dieser Anleitung]. Das Klonen des Repositories müsst ihr natürlich nicht auf der Konsole machen sondern mit dem Eclipse Plugin oder der Git Extensions-GUI!
Sobald ihr alles heruntergeladen und importiert habt erscheinen erstmal sehr viele neue Projekte in Eclipse. Ihr habt jetzt wirklich das komplette Libgdx Projekt inklusive Game engine, backends, utilities,tests und demos. Sollten davon einige Fehler haben liegt das wahrscheinlich daran, dass euch die Android Development Bibliotheken fehlen. Das ist nicht schlimm, ihr könnt die Desktopversion trotzdem ausführen.
Hier sind noch einige andere Links zu Tutorials:
* [https://github.com/libgdx/libgdx/wiki/A-simple-game A simple game]
* [https://github.com/libgdx/libgdx/wiki/The-application-framework Libgdx Application framework]
* [https://code.google.com/p/libgdx/wiki/VideoTutorials ältere Tutorial videos]
* [http://steigert.blogspot.de/2012/02/1-libgdx-tutorial-introduction.html steigert blog]
=== GDW Bibliothek ===
Einige Dinge sind während der letzen GDWs entstanden, die wiederverwendet werden können. Code für die Netzkommunikation, ein Box2DWrapper, Asset Loader und andere Helferklassen findet ihr darin. Wir werden das dann auch im Git Repository ablegen.
== Themen ==
=== User Interface ===
==== Heads 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.
==== 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.
=== Assetverwaltung ===
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 ===
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 ===
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.
=== 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 ===
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 ===
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 ===
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 ===
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.