== Allgemein ==Wir empfehlen erst einmal den Wikieintrag Es wird empfohlen, zunächst diesen Artikel zu lesen, danach etwas anschließend im zugehörigen Quellcode zu stöbern und dann noch einen Blick in die Demos und Tests zu werfen! Das . Ziel istes, dass ihr der Teilnehmer ein ungefähres Verständnis habt was es für die bestehenden Klassen und Zusammenhänge gibt. Manches davon wie Physik oder Rendering ist komplizierter, anderes wie Audio und Assets ist eher einfacher zu verstehenerhält.
== 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.Solltet ihr eure bereits installierte IDE nutzen wollen, stellt bitte sicher, dass ihr die nötigen Plugins installiert und konfiguriert habt.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 Anforderungen an die IDE ===Es wird erwartet, dass eure die genutzte IDE folgendes Setup bietetfolgende Anforderungen erfüllt:
* JDK 8
* Maven Unterstützung
* SettingsProjektspezifische Einstellungen:
** UTF-8 Character Encoding
** 4 Whitespaces anstelle von Tabs
Im Punkt Abschnitt[[GameDevWeek/Programmieren#Tutorials|Tutorials]] gibt es finden sich Hilfestellungen hierzu!.
=== Nutzt in keinem Fall die eingebauten Plugins für 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ändnisprobleme.Zudem gibt es hier oft andere Probleme mit denen wir euch nicht helfen könnenVerständnis- und Technikproblemen.
== Genutzte Technologien ==
=== Framework & CodeBase Codebase ===Um nicht jeden Aspekt eines Spiels selber zu schreiben implementieren und uns sich somit auf das Spiel die Entwicklung des Spiels konzentrieren zu können nutzen wir , wird das Java Spiele Framework -Spieleframework [http://libgdx.badlogicgames.com/ LibGDX]. Zudem haben wir eigene Klassen geschrieben, die wir in der [https://github.com/Lusito/GameDevWeek CodeBase] zur Verfügung stellenverwendet.
Zudem existieren eigene Klassen, die in der [https://github.com/Lusito/GameDevWeek CodeBase] zur Verfügung gestellt werden.
=== Versionskontrolle ===
Zur Als Versionsontrolle setzen wir wird Git eineingesetzt. Dazu wird es auf [http://www.github.com/ GithubGitHub] ein Repository geben zu dem jeder Teilnehmer Zugriff bekommterhält. Das bedeutet jeder Programmierer benötigt '''einen Github Accountauf github.com'''. Solltet ihr noch überhaupt Sollten keine Ahnung von rudimentären Kenntnisse zur verwendung einer Versionskontrolle habevorhanden sein, dann lest euch wird darum gebeten die Dokumentation auf der [http://git-scm.com/ Git Homepage] durchzurate zu ziehen. Zumindest Im Mindestens das Prinzip und das Ziel eines solchen Systems solltet ihr schonmal gehört habenin Grundzügen verstanden werden. Die eigentliche Benutzung ist dann relativ einfach und mit wenigen (aber bitte durchdachten! ) Klicks erledigtVerwendung des Programms Git beschränkt sich meist auf wenige, einfache Konsolenbefehle. Während der GDW stehen euch die Organisatoren hier natürlich für Fragen zur Seite!Verfügung.
Es stehen euch zwei Möglichkeiten bereit Git zu nutzen:
* Git als Kommandozeilen Programm* [http://www.sourcetreeapp.com/ SourceTree] ''(als "Einsteigerfreundliche " GUI* Commandline für die Erfahrenen unter euch. Nutzt dies nur wenn ihr euch damit wirklich auskennt!)''
=== Build System ===
Um die Abhängigkeiten für Java, Libgdx und andere benötigte Bibliotheken einfach zu verwalten, werden wir wird Maven verwenden. Maven benötigt nur lediglich eine Datei mit dem Namen “pom"pom.xml” xml" und lädt dann auf deren Basis dynamisch die nötigen Bibliotheken aus zentralen Repositories. Damit Auf diese Art und Weise müssen wir keine Libraries mehr mit über Git synchronisierensynchronisiert werden.
NetBeans kann Maven Projekte als solche Ladenvon Haus aus laden. Bei Eclipse wird ein benötigt das Plugin "''([http://www.eclipse.org/m2e/ m2eclipse]) benötigt''", welches das Maven Projekt in ein Eclipse Projekt konvertiert.Nach der Installation könnt ihr kann über “Import"Import ->Maven” Maven" ein solches Projekt importierenimportiert werden. Die Abhängigkeiten werden dann direkt heruntergeladen und in das Projekt integriert.
== Tutorials ==
** [[GameDevWeek/CodeBase|Die CodeBase]]
Hier sind noch einige Einige externe Tutorials zu LibGDX:
* [https://github.com/libgdx/libgdx/wiki/A-simple-game A simple game]
== Themengebiete ==
Als Programmierer arbeitet man in der Regel in einem Teilbereich zusammen mit anderen Programmierern.
Im folgenden Folgenden sind Teilbereiche aufgelistet, die regelmäßig vorkommen.
=== User Interface ===
==== Heads Up Head-up-Display ====Ihr visualisert Es werden die Informationen aus den Klassen der Spielweltvisualisert. Ihr entscheidet Es muss über das Layout und die Widgets mit denen etwas dargestellt wirdentschieden werden. Manche davon sind bereits etabliert wie Label, Listen oder Slider. Andere wie bspw 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 bspw beispielsweise ein Splashscreen zu Beginn, ein Startscreen, Serverbrowser, Charakterauswahl und ähnlichesÄhnliches. Ihr kümmert euch Es wird sich auch um mit den Input während das Menü angezeigt wirdfür die Menüs beschäftigt. Dazu müsst ihr müssen Maus und Tastatureingaben verarbeitenverarbeitet werden.
=== Assetverwaltung ===
Eure 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, Settings Einstellungen und ähnlichesÄhnliches. Ihr setzt euch Es wird sich damit auseinander wann 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. Ihr erschafft also die Es wird eine Schnittstelle für Assets geschaffen, die viele andere Gruppen nutzen . Aus diesem Grund muss sichergestellt werden und müsst sicherstellen, dass jeder alle Mitarbeiter bequem auf die Assets zugreifen kannkönnen.
=== Audio ===
Euer Team bring Das Audioteam bringt den Ton ins Spiel. Ihr Es verwaltet alle laufenden Sounds und achtet darauf , dass nicht zuviele 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
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 Spielelogik === Eure Die Aufgabe der Spielelogik-Abteilung ist das Grundgerüst die Implementierung des Grundgerüstes für das Spiel zu implementieren. Ihr Sie implementiert die zentrale Klasse zentralen Klassen und Schnittstelle Schnittstellen für alle anderen Teams. Hauptsächlich Im Wesentlichen setzt ihr sie alle Objekte der Spielwelt mit ihrer Funktionalität um. Dazu gehören bspw z.B. der Spieler, die Gegner NPCs und die Items. Oder auch , sowie interaktive Mapelemente Elemente wie Türen und Schranken. Ihr setzt also die ''(Spielmechaniken um.)''
=== Rendering ===
Eure Aufgabe ist das Diese Abteilung beschäftigt sich mit dem Zeichnen von der Welt, den Spielern, Entities, etcAnimationen. Animationen, Partikeleffekte und Shader benötigen b3esondere hierbei besondere Aufmerksamkeit. Ihr seid für den WOW Effekt zuständig. Oft kann man durch visuelles Feedback den der Spielspaß stark erhöhengesteigert werden.
=== Physik ===
Euer Team Das Physikteam beschäftigt sich damit die mit der Anbindung der Physikengine "Box2D anzubinden". Dazu gibt es existiert bereits einen Wrapper in LibgdxLibGDX. Ihr kümmert euch darum den Spielobjekten Es sorgt dafür, dass die Spielobjekte eine Repräsentation in der Physikimulation zu gebenPhysiksimulation erhalten. Dazu gehören einerseits Form, Masse, Dichte und Reibung eines Objekts. Andererseits , 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 sicherwird sichergestellt, dass die Spielobjekte korrekt mit der Physiksimulation synchronisiert werden, damit Grafik und Physik sich nicht unterscheidendivergieren.
=== Netzwerk ===
Eure Die Aufgabe des Netzwerkteams ist es , die Spieldaten im Netzwerk synchron zu haltensynchronisieren. Damit sich das Spiel in auf jedem Client das selbe istim selben Status befindet, müssen ausgewählte Daten ständig synchronisiert werden. Ihr setzt euch Es wird sich mit Timing und Umfang dieser Datenpakete auseinanderauseinandergesetzt. Außerdem müsst ihr Weiter muss ein Client-Server Konzept integrieren. Dieses Aufgabengebiet berührt sehr viele andere integriert werden, was aufgrund der starken Verknüpfung mit den Aufgabenbereichen anderer Teams und erfordert viel Abspracheeine empfindliche Aufgabe darstellt.
=== Künstliche Intelligenz ===
Sollte es im Spiel irgendeine Art von künstlicher eine künstliche Intelligenz gebenerforderlich sein, dann wird auch hierfür ein Team gebildet. Ihr Dieses beschäftigt euch sich mit Handlungsbabläufen wie für beispielsweise bei Bots. Dazu wird es eine eigene Implementierung eines Behaviour Trees geben. Ihr müsst , mit dessen Hilfe die NPCs auf Grundlage der aktuellen Spielsituation die computergesteuerten Spieler steuerngesteuert werden.
[[Kategorie:GameDevWeek]]