# Einstieg in Java Game Development



## $Golden (20. Sep 2016)

Hallo Leute,
ich wollte euch fragen, wie ich am besten ins Game Development in Java reinkomme. Ich kann die Basics von Java und wollte nun ein kleines 2D-Spiel programmieren, nichts besonders aufwändiges. Bis jetzt habe ich JavaFX gelernt, nun aber habe ich im Internet viel gelesen, dass JavaFX nicht so "gut" / kompatibel wie Swing sein sollte. Außerdem weiß ich auch gar nicht wie man Spiele grundsätzlich gut aufbaut! Ich habe diese Playlist auf YT (https://www.youtube.com/playlist?list=PLah6faXAgguMnTBs3JnEJY0shAc18XYQZ) gefunden, ich würde natürlich nicht 1zu1 alles abschreiben, sondern dies als hilfestellung nehmen! Was meint ihr? 
Mit freundlichen Grüßen
$Golden


----------



## dayaftereh (21. Sep 2016)

Hey, es gibt ein schönes Tutorial von Quaxli. Hier ist der Link: http://www.ralf-bauer.org/java/tutorial/Tutorial.zip
 Ich würde das einfach einmal durch Arbeit. Denke es gibt dir einen netten Einstieg.


----------



## InfectedBytes (21. Sep 2016)

Und benutz am besten direkt ein sinnvolles Framework. Auf keinen Fall swing! JavaFX ist zwar schon besser, würde ich aber auch von abraten. Am besten nutzt du sowas wie LibGDX


----------



## Jardcore (21. Sep 2016)

Ich würde auch LibGDX empfehlen. Aber die Frage ist auch warum gerade Java. Bin selbst überzeugter Java Entwickler und habe mich sehr viele Monate mit LibGDX auseinander gesetzt und ein kleinen Prototypen gebaut.
Dann habe ich das ganze mal in Unity probiert um zu sehen wie der Unterschied im Workflow ist. Um mal einen zeitlichen Rahmen zu nennen: Mit Unity habe ich für den gleichen Prototypen nur einen Bruchteil der Zeit gebraucht. Mit LibGDX drei Monate und mit Unity ca. 3std.
Gut natürlich hatte ich schon die fertigen Assets und ich wusste ungefähr was ich benötige, aber trotzdem ist die Zeitspanne schon gewaltig verkürzt worden.

Wenn es dir um die Entwicklung eines Spiels geht, dann nimm das Werkzeug was dir am schnellsten Hilft.


----------



## InfectedBytes (21. Sep 2016)

Jardcore hat gesagt.:


> Ich würde auch LibGDX empfehlen. Aber die Frage ist auch warum gerade Java. Bin selbst überzeugter Java Entwickler und habe mich sehr viele Monate mit LibGDX auseinander gesetzt und ein kleinen Prototypen gebaut.
> Dann habe ich das ganze mal in Unity probiert um zu sehen wie der Unterschied im Workflow ist. Um mal einen zeitlichen Rahmen zu nennen: Mit Unity habe ich für den gleichen Prototypen nur einen Bruchteil der Zeit gebraucht. Mit LibGDX drei Monate und mit Unity ca. 3std.
> Gut natürlich hatte ich schon die fertigen Assets und ich wusste ungefähr was ich benötige, aber trotzdem ist die Zeitspanne schon gewaltig verkürzt worden.
> 
> Wenn es dir um die Entwicklung eines Spiels geht, dann nimm das Werkzeug was dir am schnellsten Hilft.


Du vergleichst aber auch ein bisschen Äpfel mit Birnen.^^
LibGDX ist halt "nur" ein Framework, welches einem Arbeit abnimmt. Unity hingegen ist eine vollwertige Game Engine, welche im Grunde bereits alles enthält was man braucht. Zudem natürlich noch der schon erwähnte Asset store


----------



## Jardcore (21. Sep 2016)

InfectedBytes hat gesagt.:


> Asset store


Die Assets habe ich selbst erstellt 

Aber im Prinzip ist es nicht unbedingt der Vergleiche A vs. B. Denn eigentlich möchte man ein Spiel erstellen. Und deshalb spricht nichts dagegen eine vollwertige Game Engine zu benutzten. Wieso muss man das Rad neu erfinden, wenn es praktikable Lösungen gibt.


----------



## Major_Sauce (26. Sep 2016)

Moin,

im Grunde würde ich folgendes behaupten:
Unity: Super Tool, ermöglicht wahnsinnig schnelle Entwicklung von Spielen im 2D/3D bereich, mittlerweile meines wissens auch mit VR-Unterstützung und ähnlichem (Wenn nicht nativ dann über Erweiterungen) aber definitiv nichts für den "Anfänger der mal ein wenig von der Spieleentwicklung lernen will".
Wieso ? Ganz einfach, Unity nimmt dir alles ab. Du musst dich nicht mehr wirklich um die Grundstruktur eines Spiels kümmern sondern kannst gleich (mehr oder weniger) mit Content anfangen.
Wenn du wirklich ein gefühl für Spiele bekommen willst, rate ich auch von Engines wie JmonkeyEngine oder LWJGL ab, da auch hier schon die Hälfte der Arbeit erledigt ist.
Für ein richtiges Spiel würde ich auf jeden Fall eine Engine empfehlen, aber es ist vielleicht gar nicht so doof mit Swing anzufangen (bitte kein JavaFX, ist meiner Meinung nach! eher für GUIs oder Applets zu verwenden, ich wiederhole, meine Meinung) Swing bietet dir außerdem den vorteil dass du auch mal merkst was denn alles zum rendern gehört, und wie die Performance davon abhängt.
Wenn du dann mal ein kleines Spiel, sei es nur Snake, mit Swing entwickelt hast, wirst du wesentlich einfacher in die Engine finden, da du dann verstehst was denn da überhaupt die Engine macht, wenn es eine Open Souce Engine ist, weißt du auch wesentlich mehr über Fehlerbehandlung und ähnliches, da du einfach mal den Code nachschlagen kannst.
Wenn du irgendwelche Fragen bezüglich der Spieleprogrammierung unter Swing/AWT/SWT hast, kurze PM an mich und ich schaue mir das mal an. 
Ansonsten kannst du natürlich auch den Meinungen da oben folgen, wollte nur mal mein Statement dazu abgeben 

Mfg Major


----------



## InfectedBytes (26. Sep 2016)

@Major_Sauce Grundsätzlich gebe ich dir Recht, dass man für den Einstieg nicht direkt ne große
Engine nutzen sollte.
Aber wenn man schon ein grafisches Spiel manuell machen will, dann bloß *nicht* mit Swing!
Wenn man sich mal die ganzen Anfänger "Spiele" ansieht, endet jedes einzelne damit, dass hunderte JLabels (mit ImageIcon) sich flackernd über den Screen bewegen. Furchtbar, einfach nur schlecht. Wenn schon mit Swing, dann indem man paint überschreibt und direkt auf das Graphics objekt seine Bilder zeichnet.
Aber auch hier würde ich eher zu JavaFX raten, da man damit sogar recht effizient zeichnen kann.

Insgesamt würde ich auch von einer kompletten Engine abraten, dafür sollte man aber definitiv ein passendes Framework nutzen, wie z.b. LibGDX. Dort muss man weiterhin alles manuell zeichnen, allerdings muss man sich nicht um den low level kram kümmern (wie z.b. texture binding, etc.). Außerdem hat man dort direkt Vector klassen und andere nützliche features.


----------



## Jardcore (27. Sep 2016)

Major_Sauce hat gesagt.:


> Anfänger der mal ein wenig von der Spieleentwicklung lernen will"


Ich glaube hier wird Programmieren mit Spieleentwicklung verwechselt. Zur Entwicklung eines Spiels gehört mehr als die reine Programmierung. Wenn man ein Spiel entwickeln will braucht man zuerst einmal eine gute Idee und dann einen Prototypen. Ein Prototypen kann man relativ schnell mit Unity entwickeln. Wenn man jetzt das ganze zu einem Spiel machen möchte kann man immer noch entscheiden ob man das ganze jetzt in Java/C++ nochmal schreibt und erweitert oder ob man bei Unity bleibt. Am Ende interessiert es den Spieler nicht in was du das Spiel entwickelt hast und welche Sprache du verwendest. Das einzige was zählt ist, ob das Spiel Spaß macht.
Man sollte Spieleentwickung meiner Meinung nach nicht gleichsetzten mit: Man versteht alles über OpenGL und DirectX und man kann genau sagen wie Shader und NormalMaps eingesetzt werden. Man muss auch nicht wissen das ein 3D Objekt aus Verticies besteht und wie eine Textures gerendert werden. Dinge die wichtig sind, sind generelle Abläufe wie, wann, was gemacht wird.
Natürlich schadet es nicht so etwas zu wissen, aber Zeit ist Geld, und niemand braucht heutzutage das Rad neu zu entwerfen. Ich würde sagen man lernt mit Unity sogar schneller die eigentlichen Abläufe der Spieleentwicklung als durch reine Programmierung in Java.
Fall man doch etwas kleines Entwickeln möchte, würde ich auch zu JavaFX raten, geht wesentlich schneller von der Hand und ist besser Strukturiert als Swing. 


Major_Sauce hat gesagt.:


> bitte kein JavaFX, ist meiner Meinung nach! eher für GUIs oder Applets


 Hier sagst du es bereits, es ist deine Meinung.
https://gamedevelopment.tutsplus.co...ion-to-javafx-for-game-development--cms-23835 zeigt z.B. wie man das mit FX machen kann


----------



## Major_Sauce (27. Sep 2016)

Jardcore hat gesagt.:


> Ich glaube hier wird Programmieren mit Spieleentwicklung verwechselt


Kommt ganz drauf an was man für ein typ ist. 

Prototyp: kommt drauf an was er machen will. Wenn er jetzt zum Bleistift bei LudumDare oder vergleichbaren GameJams mitmachen will, ist meißt das ganze Spiel ein Prototyp und da man aus dem Kontext erahnen kann dass Golden bisher gar-bis fast keine Zeit in Spieleentwicklung investiert hat, wird das erste Spiel meiner Erfahrung nach wahrscheintlich nur einer von 20 Prototypen. Wie gesagt, meine Erfahrung, vielleicht hast du da andere Erfahrungen gemacht, ich sehe nur oft Leute die verzweifelt schreiben dass Sie schon 10 mal angefangen haben und trotzem jedes mal denken Sie sollten es nochmal mit einem frischen Projekt versuchen.

Idee ist natürlich wichtig, Protoyp auch, und natürlich kommt da auch noch das ganze Grafik-geraffel und Sound ect. dazu, aber auch hier kommt es ganz dauf an was man für ein Mensch ist. Es gibt natürlich leute die gerne Grafiken zusammenschrauben oder and guten Sounds rumsitzen und so wenig vom Code mitbekommen möchten wie möglich, es gibt aber auch das krasse Gegenteil, besstes Beispiel: ich habe neulich ein kleines 2d Game gesehn das komplett aus Code bestand. Da hat sich jemand einen kleinen Grafik-Editor zusammengeschustert der kleine Pixelarts dann als Code (Array mit Farbcodes) ausgibt und hat den Code dann direkt in den Sourcecode kopiert. Natürlich keine schöne Lösung, aber da sieht man mal dass es auch Leute gibt die gerne den ganzen Tag nur void, int, boolean und ähnliches sehen.



InfectedBytes hat gesagt.:


> @Major_Sauce
> bloß *nicht* mit Swing!
> indem man paint überschreibt und direkt auf das Graphics objekt seine Bilder zeichnet


Swing und dann Paint überschreiben, hätte ich vielleicht dazuschreiben sollen. JavaFX ist auch super, da hast du schon recht, vor allem da man da auch direkt in den 3d Bereich gehen kann wenn man möchte und HTML ist ja soweit ich weiß auch Möglich ?!
Hab mir JavaFX noch nicht so genau angeschaut, ich durfte nur damals die Erfahrung machen dass man sich freut wie Hulle wenn man doch mal endlich die ersten Pixel auf das verdammte JPanel oder Canvas bekommt 

Ach ja, Jardcore, im Grunde ist fast alles nur meine eigene Meinung, bei deinen Antworten wahrscheinlich genauso wie bei jeder anderen. Ich meine früher war assembler das non-plus-ultra, heute tun mir die Entwickler vor Rollercoaster Tycoon leid, weil die das alles in Assembler schreiben durfte, daher würde ich jetzt behaupten dass man nicht anfangen sollte damit Spiele zu Entwickeln, aber die Meinung der Entwickler damals war wohl anders. Jeder hat seine eigene Meinung, ist wohl auch besser so.

Mfg Major


----------



## XyMorgan (28. Sep 2016)

Die Frage ist so einfach oder auch schwer zu beantworten wie:

welches Auto soll ich mir kaufen?  -> fahren tuen alle.

Hab mal in das Tutorial reingeschaut. Ist mehr oder minder Plain Swing. Ist zwar nicht komplett fertig aber aus meiner Sicht durchaus brauchbar. Finde ist ein guter Startpunkt um mit der Spieleentwicklung in Java anzufangen. Vor allem schult es deine Skills in Java.

Vorteile: Auf Basis Swing kannst später so ziemlich alles mit rein nehmen und wenn du später was anderes mit rein genommen hast, kannst Swing austauschen. Wenn es mal um Kompatibilität geht. 

Fängst mit dem Tutorial an, tauscht irgendwann den Grafikkrams gegen OpenGL (jogl oder wat auch immer), und wenn es dann auf Platform X nicht läuft tauschst Swing gegen was natives.

Der Rest vom Javacode, game-Logik usw. musst nix austauschen. Probleme & Fehler kannst selbst beheben.

Nachteile: Musst erstmal viel lernen und viel selber machen.


Vorteile von Frameworks: Bekommst viel geschenkt, findest oft ne gute Community (zumindest bei den Bekannten) 

Nachteile: Lernst, je nach Framework,  nicht umbedingt viel Java dazu. Bei Fehlern kannst z.T. lange warten bis es behoben wird. Musst dich ggf. in spezielle IDEs einarbeiten. Wenn du an Grenzen des Frameworks kommst wird es schwer darüber hinaus zu kommen.


----------



## Viktim (29. Sep 2016)

Hi,

Ich geb auch mal meinen Senf dazu...
Wenn du erstmal mit kleinigkeiten anfangen möchtest, dann mach erst das Swing tutorial, und versuche dann mithilfe von @Jardcore 's JavaFX Tutorial das gleiche Spiel nachzubauen  hab ich mal aus Spaß gemacht (Ich hab vorher noch nie wirklich mit JavaFX zu tun gehabt), und das hat super Funktioniert 
Dann hast du den Grundaufbau bestimmt verstanden, und kannst mal mit LibGDX und all den netten Sachen, die schon angesprochenwurden probieren, was "vernünftiges" zu machen


----------

