Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

31

11.05.2016, 17:45

Klar sind Spiele in Java möglich!
Bei unserem 2D MMORPG Pentaquin (Pentaquin Foren Vorstellung) setzen wir sogar voll auf Java, sowohl im Server, als auch im Client Bereich.

JavaFX ist ein reines GUI Framework / Library, für GUI ist es richtig geil, aber für Spiele würde ich es aus Performance Gründen nicht verwenden - oder würdest du ein Spiel mit AWT / Swing schreiben? Dennoch sind kleine Spiele auch mit JavaFX ohne Probleme zu realisieren.

Wenn man ein Spiel erstellt, sollte man in Java aber auf OpenGL setzen, dafür gibt es dann libraries wie LWJGL. Da man in Java memory native allozieren kann und genau das LWJGL für seine native calls auch macht, hat man den GC Overhead auch nicht beim Rendern und die Performance kann sich sehen lassen.

Spiele Engines wie die bereits erwähnte JMonkeyEngine, das alt bekannte Slick2D oder eben libGDX basieren wiederum auf LWJGL. Auch Minecraft baut auf LWJGL auf, allerdings habe ich hier schon oft gelesen, dass man Minecraft wohl lieber nicht als Beispiel verwenden sollte - inhaltliches Zitat: "Minecraft ist das schlechteste Beispiel für Java, da die Performance nicht besonders gut ist - das liegt allerdings nicht an Java, sondern am Entwickler!"

Java Applets (bezüglich Browser) wurden übrigens eingestampft:
https://jaxenter.de/java-deprecated-orac…r-plug-in-33979

Zitat

Nee, JavaFX ist sowas wie Flash (mal war). Damit kann man ziemlich viel machen, eben auch Spiele. Dreh- und Angelpunkt ist immer die Grafikfähigkeit und wie schnell die Grafik ist. Das entscheidet über Spieletauglichkeit. Das ist ne API, relativ "low level". Also sowas wie bitmapdata.copypixel() ist da die beste Funktion überhaupt und sauschnell! Wirklich :)


JavaFX mit Flash zu vergleichen ist wie ein Vergleich zwischen Apfel und Birne - natürlich haben beide ein UI geboten, aber das Ziel hinter Flash oder Java Applets war die Portierung für den Browser - damals gab es noch nicht solche Canvas in HTML o.ä., mit denen man diese Sachen bereits mit HTML und Javascript erledigen konnte.

Wie schnell die Grafik ist, hängt von mind. 4 Sachen ab:
  • Berechnung auf der CPU oder GPU
  • Wie schnell können Daten auf die GPU hochgeladen werden?
  • Kann man die z.B. OpenGL Api direkt ansteuern?
  • Wie viel GC Pressure erzeugt wird

Mit LWJGL kann man direkt auf OpenGL setzen und die GPU damit direkt ansprechen - wenn man das tut, hat man ungefähr die selbe Performance wie ein in C++ geschriebenes Spiel, welches OpenGL nutzt. DirectX funktioniert so ähnlich wie OpenGL, soll zwar ein kleines bisschen schneller sein, dafür läuft es eben aber auch nur unter Windows.

Der nächste Punkt ist:
Wie schnell eine Applikation unter Java oder C++ ist, hängt auch viel vom Entwickler ab!
Beispielsweise kann ein Java Entwickler Spiele schreiben, welche deutlich schneller sein könnten, als ein Spiel, welches in C++ geschrieben wurde, wenn der C++ Programmierer nicht so viel Ahnung hatte. In Java kann dir der Garbage Collector, wenn man nicht aufpasst, die Performance schnell herunterziehen, dafür kann es bei C++ passieren, dass man immer mehr Memory Leaks öffnet, da der Speicher nicht richtig verwaltet bzw. wieder freigegeben wird. Und gerade im Multi Threading Bereich weiß man ohne Reference Counting manchmal gar nicht, ob eine Variable noch in Benutzung ist, oder nicht.
Dazu kommt, dass die Java JVM schon recht intelligent ist und sehr viel optimiert, habe da schon einiges zu gehört und gelesen, seien es Speicherzugriffe, Methodenaufrufe (Code einfach mit rein kopieren, um Methoden Aufruf zu sparen) usw. Desweiteren ist Multi Threading in C++ nicht sehr beliebt (sehr umständlich), in Java aber sehr einfach zu realisieren. Multi Threading kannst du mit Java richtig schön bewerkstelligen.
Indie Game-Dev Programmierer beim 2D MMORPG Pentaquin | Pentaquin Foren Vorstellung

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »JuKu« (11.05.2016, 17:51)


32

11.05.2016, 20:01

Das geht auch "richtig schön" in C++. Zumindest seit C++11.

MfG
Check

33

11.05.2016, 20:08

Ja, C++ hat seit 2011 ziemlich zugelegt.
Edit: btw: der Forumschat scheint nicht zu funktionieren.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

34

12.05.2016, 12:46

Habe die ganze GC Diskussion mal abgespalten.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

35

11.12.2016, 20:52

Mittlerweile entwickle ich eine kleine (Client) 2D Game Engine für Java, die Grafik & Sound Sachen abnehmen soll:
https://www.spieleprogrammierer.de/12-pr…-f%C3%BCr-java/
Indie Game-Dev Programmierer beim 2D MMORPG Pentaquin | Pentaquin Foren Vorstellung

Werbeanzeige