Lohnt es sich, Computerspiele mit Java zu programmieren?

5 Antworten

Vom Fragesteller als hilfreich ausgezeichnet
Gibt es so eine Engine auch für Java (...)

Naheliegend wäre da die jMonkeyEngine oder (nur für 2D) die LITIEngine. Andernfalls gibt es Bibliotheken/Frameworks wie libGDX, FXGL oder LWJGL.

(...) oder brauch man überhaupt keine Engine dafür?

Zur Spieleprogrammierung benötigst du nicht unbedingt eine Game Engine wie Unity o.ä.. Du kannst dir dein Toolset auch selbst zusammenstellen. Sei es mit irgendwelchen Bibliotheken oder eigenen Funktionen.

Wäre es ggf. sogar sinnvoller zusätzlich c++ oder c# zu lernen und dann mit einer der erwähnten Engines zu programmieren?

Es wäre sinnvoll, erst einmal zu analysieren, was du für tatsächliche Anforderungen an dein Spiel stellst. Lege ein Game Concept an, welches dir bei der Planung hilft.

Zur Spieleprogrammierung mit Java generell habe ich hier schon einmal etwas geschrieben: Warum ist Java für Spiele nicht so gut?

Zur Spieleplanung hier: Was brauche ich, um ein Spiel zu entwickeln?

Palladin007  31.12.2021, 14:34
Zur Spieleprogrammierung benötigst du nicht unbedingt eine Game Engine wie Unity o.ä.. Du kannst dir dein Toolset auch selbst zusammenstellen. Sei es mit irgendwelchen Bibliotheken oder eigenen Funktionen.

Zum Lernen oder Spaß an der Freude würde ich fast schon sagen: Man sollte eine eigene Engine schreiben.

Aber wenn daraus tatsächlich ein produktives Spiel werden soll, sollte man mMn. immer auf bestehende Engines setzen, außer man weiß was man tut, hat Erfahrung auf dem Gebiet und einen guten Grund, warum bestehende Engines nicht in Frage kommen.

0
Morgoth364 
Fragesteller
 31.12.2021, 14:56

Kann man jMonkeyEngine gut benutzen? Also ist sie übersichtlich und schnell zu erlernen?

0
regex9  31.12.2021, 15:02
@Morgoth364

Sie gehört zu den einfach erlern-/bedienbaren Engines.

0
Morgoth364 
Fragesteller
 31.12.2021, 16:49
@regex9

Sollte man eher die Engine oder die Frameworks bevorzugen? Und gibt es gute Tutorials für beides?

0
Morgoth364 
Fragesteller
 31.12.2021, 17:05
@regex9

Ich habe gerade gesehen, dass es mehrere "Arten" der Engine gibt. Einmal jMonkeyEngine SDK, dann Binaries, um die Engine in einer IDE zu benutzen, und dann alleine die Engine Sources, um sich dadurch eine eigene zu bauen. Was wäre die beste Wahl?

0
regex9  31.12.2021, 17:37
@Morgoth364

In der Getting Started-Sektion werden drei Optionen angeführt: Ein Download, bei dem das SDK an die NetBeans IDE ausgerichtet ist (diese ist also dann dein Code-Editor), ein extra Download der Bibliotheken oder die Einbindung via Gradle (über ein Maven Repository).

Die beste Wahl ist m.E. der dritte Weg über Maven oder Gradle. Ob du dein Maven- oder Gradle-Projekt nun mit Eclipse, IntelliJ oder NetBeans erstellst, steht dir dann frei. Maven und Gradle sind jeweils Projektverwaltungstools, die dir das Management von externen Abhängigkeiten vereinfachen sowie Projektstrukturierung und Buildtasks.

0
regex9  31.12.2021, 17:55
@Morgoth364

Bei Java sind libGDX und JME (jMonkeyEngine) die populärsten Tools. JME wurde für 3D-Spiele ausgelegt, libGDX ursprünglich hingegen für 2D. Inzwischen sind ebenso Basisfunktionen für 3D dazugekommen, doch ist JME im Vergleich auf dem Gebiet noch immer ausgereifter.

Erste Anlaufstelle sollte die offizielle Dokumentation auf den Webseiten beider Tools sein. Dort sind auch Tutorials verlinkt / enthalten. Ob du passende/aktuelle Tutorials auf Udemy, Lynda, YouTube, o.ä. findest, kann ich nicht sagen. Sowohl libGDX als auch JME haben in diesem Jahr einen Versionssprung gemacht.

0
Morgoth364 
Fragesteller
 31.12.2021, 18:34
@regex9

Kann man die beiden auch kombinieren? Also Features aus JME und libGDX zusammen verwenden?

Und habe ich das richtig verstanden, dass der beste Weg JME zu benutzen ist, diese via Maven oder Gradle z.B. in Eclipse zu integrieren? Gibt es dazu irgendwo Tutorials?

0
regex9  31.12.2021, 18:58
@Morgoth364

Allein den Versuch würde ich nicht als sinnvoll erachten. Beide nutzen ihre eigenen Pipelines. So hat libGDX bspw. seine eigene Zeichenfläche und JME ebenso.

Das wäre der Weg, den ich bevorzugen würde.

Ein paar Maven-Tutorials/Artikel:

Ein paar zu Gradle:

Im Grunde reicht es aus, ein Maven-/Gradle-Projekt anzulegen (deine IDE hat Projekttemplates dafür in petto) und dann die Dependencies in der pom.xml / build.gradle anzugeben. Danach ist nur noch ein Projekt Build vonnöten. Lies aber dennoch einen der oben verlinkten Artikel.

0
Morgoth364 
Fragesteller
 31.12.2021, 19:20
@regex9

Vielen Dank! Das wird mir erst mal sehr helfen😅 Wenn nicht frage ich nochmal nach.

Außerdem ein frohes neues Jahr

0
Morgoth364 
Fragesteller
 01.01.2022, 15:13
@regex9

Im neuen Jahr gleich eine Frage: Ersetzt JME den Gebrauch von JavaSwing oder JavaFX?

0
regex9  01.01.2022, 15:54
@Morgoth364

Im Hinblick auf das Zeichnen deiner Oberfläche: Ja. Wenn du nach UI-Komponenten suchst (z.B. für ein Menü oder eine Highscore-Liste in deinem Spiel), schau dir Nifty GUI, tonegodgui oder Lemur an. Das sind für JME angepasste GUI-Toolkits.

Für Anwendungen, die kein Spiel werden sollen, wäre JME allerdings kein guter JavaFX-Ersatz.

0
Morgoth364 
Fragesteller
 05.01.2022, 12:38
@regex9

Müssen Dateien z. B. von FXGL heruntergeladen werden, um über Maven oder Gradle die jeweilige Bibliothek in das Projekt einzubinden?

0
regex9  05.01.2022, 13:00
@Morgoth364

Du selbst musst nichts herunterladen. Das machen Maven/Gradle für dich während des Buildvorgangs. Du brauchst nur die Dependency in der pom.xml / build.gradle setzen, die hier auch vorgegeben wird.

0
Morgoth364 
Fragesteller
 08.01.2022, 10:13
@regex9

Ich habe jetzt mal ein Maven-Projekt erstellt und da sind jetzt viele unterschiedliche Ordner. Wo speichert man was ab? Und was ist z.B. die Aufgabe vom target-Ordner?

0
regex9  08.01.2022, 15:09
@Morgoth364

Dein Hauptentwicklungsverzeichnis ist src/main/java. Darunter kommen all deine Klassen / Packages. Programmressourcen wie Bilder, Textdateien, o.ä. wandern in src/main/resources.

Der target-Ordner wird von Maven befüllt. Nach einem Build findest du dort die aus dem Prozess resultierenden Dateien.

Weitere Informationen, auch zu den anderen Ordnern, kannst du in der Maven Dokumentation nachschlagen. Oder in diesem Artikel.

0
Morgoth364 
Fragesteller
 29.01.2022, 17:16
@regex9

Kann man in JME auch Pixel Art Spiele erstellen oder sollte ich dafür auf eine andere Engine/Bibliothek setzen?

0
regex9  29.01.2022, 20:31
@Morgoth364

In JME sind auch 2D-Spiele möglich und den Stil der Grafiken bestimmst du doch selbst.

0
Morgoth364 
Fragesteller
 09.05.2022, 22:14
@regex9

Kennst du gute Tutorials für die LITIengine? Da diese speziell für 2D Spielen erstellt wurde, wollte ich sie mir mal anschauen und habe auch einen guten ersten Eindruck.

Ich habe mir schon die Website angeschaut, doch ist dort die Einführung nicht vollständig. Auch die Tutorials habe ich mir angeschaut, doch wird da ein Programm verwendet, das die Schöpfer der Engine bereitstellen, was ich mir aber definitiv nicht herunterlade, da mehrer Virenscanner angeschlagen haben.

Nichtsdestotrotz wird erwähnt, dass man dieses Programm nicht unbedingt braucht. Deshalb suche ich jetzt Tutorials genau dafür.

Ich hoffe wirklich, dass du einige Seiten/ Videos kennst.

0
regex9  09.05.2022, 23:25
@Morgoth364

Eine andere Quelle als die Dokumentation kenne ich nicht. Auf das eine Tutorial-Video und den GitHub-Account von Gurkenlabs wird dort meines Wissens bereits verwiesen. Ich denke, so einiges wird sich über deren Discord oder Twitter abspielen. Generell ist Kontakt, so wie ich es aus Beiträgen der Entwickler herauslese, erwünscht. Da sie aus Bayern kommen, dürfte sich die Kommunikation nicht schwer gestalten.

Du meinst vermutlich den utiliti-Editor, der in der Dokumentation aufgeführt wird. Der ist Bestandteil des SDK. Vermutlich wird er auch mit gezogen, wenn du dir das Projekt via Maven oder Gradle in dein Projekt einbindest. Auf jeden Fall kannst du dir dessen Quellcode auf GitHub genauer anschauen.

Wie man ihn ersetzen kann, wird am besten im FAQ geschildert.

0
Morgoth364 
Fragesteller
 10.05.2022, 15:03
@regex9

Wäre es also möglich, dass ich mir den Code von dem utiliti-Editor von GitHub herunterlade und dann daraus eine eigene Anwendung mache, also den Code in eine .jar File packe?

0
Morgoth364 
Fragesteller
 11.05.2022, 14:31
@regex9

Ich habe das jetzt mal versucht und es hat nicht geklappt.

Beim ersten Versuch habe ich es mit Gradle versucht, weil im Download eine build.gradle Datei dabei war, doch waren in dem Quelltext viele Fehler vorhanden, da die Bibliothek, die benötigt wird, nicht vorhanden war.

Bei Maven waren schon einige Fehler verschwunden, doch wurde auch dort ein Package/ eine Klasse importiert, die ich nicht gefunden habe. (Der Name war: com.github.weisj.darklaf.components.border.DarkBorders)

(Den heruntergeladenen Ordner kann ich auch nicht importieren)

Ich weiß auch leider dieses mal nicht weiter. Ich hoffe du kannst mir wieder helfen.

0
Morgoth364 
Fragesteller
 11.05.2022, 15:26
@regex9

Es fehlt jetzt nur noch die Klasse de.gurkenlabs.litiengine.test.SwingTestSuite

Die wird in einer Test-Klasse mit @ExtendWith(SwingTestSuite.class) hinzugefügt.

Ist der Code wichtig oder kann dieser einfach problemlos entfernt werden?

0

Bitte lies eine der beiden folgenden Seiten:

  1. https://www.programmierenlernenhq.de/java-spiel-programmieren-tutorial/
  2. http://www.petrastumpf.de/michael/Wissen/SpieleprogrammierungInJava.pdf

Welche die für deinen Zweck nützlichere Anleitung darstellt, musst du selbst entscheiden.

Ich denke, erstmal solltest Du Dich mit dem Spielprinzip auseinandersetzen. Was braucht Dein Spiel? Dann weißt Du auch, was Du an Technik dafür brauchst.

Minecraft ist in JAVA Programmiert.

JAVA ist C# und C++ recht ähnlich. Aber brauchst Du so eine große Engine? Finde das vorher heraus.

Palladin007  31.12.2021, 14:32
JAVA ist C# und C++ recht ähnlich

Nein, gar nicht.

Die Syntax mag zwar ähnlich sein, aber die ist der kleinste Teil neben den riesigen anderen Unterschieden. Und selbst die Syntax unterscheidet sich immer mehr, C# ist bei dem Punkt komplexer als Java und C++ nochmal eine Ecke mehr.

0
W00dp3ckr  31.12.2021, 19:39
@Palladin007

Also, JAVA ist C# um Einiges ähnlicher als Python, Scheme, Haskell, Scala...

Ja KLAR haben die Unterschiede. Aber Syntaktisch und von der Semantik sind die einfach viel näher aneinander als sehr viele andere Sprachen.

0
Palladin007  31.12.2021, 19:51
@W00dp3ckr

Wie gesagt:

Die Syntax mag zwar ähnlich sein, aber die ist der kleinste Teil neben den riesigen anderen Unterschieden.

Es hat noch nie ausgereicht, nur die Syntax zu lernen, danach geht die Arbeit doch erst richtig los. Features, die es (nicht) gibt, Features die gleich klingen, aber anders ticken, Framework-Unterschiede, übliche Vorgehensweisen, die auf Basis der Feature-Unterschiede entstanden sind, etc.

Aber ja, sie mögen sich ähnlicher sein, als zu anderen Sprachen, aber "recht ähnlich" sind sie deshalb noch lange nicht. Das waren sie vielleicht mal vor 15 Jahren, doch seit ein paar Jahren hat sich C# noch zusätzlich zu den bereits vorhandenen Unterschieden immer mehr in Richtung C++ entwickelt - soweit es zumindest möglich ist.

0
W00dp3ckr  31.12.2021, 20:01
@Palladin007

Jo, das ist so bischn wie die Leute, die sagen: Spanisch ist ne gannnnz andere Sprache als Französisch!

Ja, klar, aber verglichen mit Japanisch und Russisch sind die beiden Sprachen schon richtig nah aneinander dran.

0

Wenn du Java kannst ist es nicht weit bis C++. Mit der etwas anderen Speicherverwaltung musst du dich beschäftigen und dem Prinzip von Zeigern. Ich würde auf jeden fall C++ verwenden.

DualStudieren  31.12.2021, 12:46

Die Sprache ist viel komplexer als das nur Speicherverwaltung und Zeiger dazu kommt.

Für große Projekte lohnt es sich, sich intensiv mit seiner Sprache auseinanderzusetzen.

0
Maddoc66  31.12.2021, 12:50
@DualStudieren

Nicht wirklich, ich programmiere seit 30 Jahren C++. Ja sie ist etwas komplexer aber das ist nichts was man als Programmierer nicht schnell drin hätte.

0
DualStudieren  31.12.2021, 13:09
@Maddoc66

Naja, vor 30 Jahren sah C++ noch ganz anders aus. Dann sind die Sprünge zu den neueren Sprachfeatures nicht so groß, wenn man sich die Sachen über die Jahre anliest in kleineren ,,Häppchen"

Habe mich mit C++ letztes Jahr etwas intensiver beschäftigt, kam davor aus der Javaecke: Von classes zu Vererbung, Zeigern, byReference und Constructoren, copy constructoren, move constructoren, Templates, etc. Bin noch lange nicht :D, hab in der Zwischenzeit wieder aufgehört und bin derzeit mit Python beschäftigt.

Mit entsprechender Lektüre kommt man sicherlich voran. Meine Erfahrung zeigt halt, dass sich Projekte besser strukturieren lassen wenn man sich in einer Sprache sehr gut auskennt, sprich die Feinheiten, Vererbung, etc. Speicherverwaltungen lassen sich selbst schreiben, klar, es gibt eben auch Konstruktionen wie Shared oder UniquePointer die einem dann doch helfen in diversen Situationen, wäre schade wenn man das nicht nutzt. Vielleicht ist es nur mein Fetisch, bin noch nicht im Beruf, weiß nicht wie wichtig das dort ist.

0

Kann sich schon lohnen, ja. Öffentlich zugängliche Engines wären mir dafür zwar nicht bekannt, aber das heißt nicht, dass es sie nicht gäbe.

Eine weitere Programmiersprache irgendwann zu lernen ist aber sicherlich auch nicht verkehrt.

Was es für Java gäbe wäre LWJGL. Das enthällt alles nötige, um ein Spiel zu programmieren.

Ein Tutorial findet sich hier:

https://lwjglgamedev.gitbooks.io/3d-game-development-with-lwjgl/content/