C vs. Java für die Spieleprogrammierung [closed]

Lesezeit: 11 Minuten

Benutzer-Avatar
Jonathan

Ich verstehe, dass C++ für Spiele (zumindest größere Spiele) im Allgemeinen als besser angesehen wird als Java. Warum ist das?

Was hält Java davon ab, in diesem Bereich wettbewerbsfähig zu sein? Welche Gründe gegen die Verwendung von Java für die Spieleprogrammierung haben die meisten Gründe und welche sind Mythen?

BEARBEITEN: Bin ein bisschen nicht vertraut mit C/C++ und dachte nicht, zwischen den beiden in Zeile 1 >.< zu unterscheiden

  • Die meisten modernen Spiele verwenden C++, nicht C.

    – GManNickG

    14. Oktober 2009 um 23:51 Uhr

  • Ob wir über Hobbyspiele oder vollwertige kommerzielle Spiele sprechen, färbt die Dinge sehr, denke ich!

    – xyz

    15. Oktober 2009 um 0:30 Uhr

  • Bei Spielen dreht sich alles um Leistung. C bietet Ihnen Low-Level-Zugriff, den Java nicht erreichen kann.

    – Pedro Estrada

    15. Oktober 2009 um 1:24 Uhr

  • Dies muss eines der ersten Male sein, dass diese Frage anders beantwortet wurde als „aber Java ist langsam!“. Das GroupThink ist endlich über diese mentale Straßensperre hinaus gereift!

    – Roß

    16. Oktober 2009 um 13:07 Uhr

  • @Ross aber Java ist langsam!!

    Benutzer529758

    5. Juli 2012 um 17:54 Uhr

Der Grund, warum Java (und C#/.NET) zu diesem Zeitpunkt keine praktikable Option für AAA-Titel ist, liegt darin, dass die etablierten Spiele-Engines und ihre Toolchains in C++ geschrieben sind. Bei der Spieleentwicklung geht es darum, einen Titel in kürzester Zeit auf den Markt zu bringen, und das Budget erlaubt es nicht, Dinge wie eine neue Sprache/Engine einzubauen, wenn mehrere bereits verfügbar sind, gut funktionieren und über einen umfangreichen Satz von Editoren verfügen und Werkzeuge, die sie unterstützen.

Der Wechsel zu Java (oder C#) würde auch eine neue leistungsorientierte JVM (oder CLI) für die Big-3 (PC, X360, PS3) oder Big-5 (hinzufügen Wii, iPhone) erfordern. Technisch machbar, aber finanziell nicht tragbar.

Bearbeiten: Jeder mit geringen Kenntnissen sowohl über virtuelle Maschinen als auch über den aktuellen Stand der Game-Engines kann Ihnen sagen, dass eine JVM oder CLI zweifellos mit einer neuen Game-Engine implementiert werden könnte, um die Leistung aktueller C++-Engines zu übertreffen. Der vorbeugende Faktor ist Zeit und Geld, nicht mehr und nicht weniger.

  • +1 – Ihre Bearbeitung scheint die einzige Antwort von jemandem zu sein, der tatsächlich mit der Geschwindigkeit der JVM herumgespielt hat.

    – Eli

    15. Oktober 2009 um 0:26 Uhr

  • Obwohl nichts davon für die Konsolenentwicklung gilt, wo das große Geld ist.

    – Ed S.

    20. Oktober 2009 um 1:34 Uhr

  • Sie werden überrascht sein, wie viele Spiele Werkzeug sind in Java geschrieben – insbesondere kundenspezifische Inhouse-Tools. Java ist einfacher zu programmieren, und ein Spieletool benötigt nicht die Bare-Metal-Geschwindigkeit, die ein Spiel braucht, daher ist Java eine gute Wahl.

    – Chii

    20. Oktober 2009 um 2:16 Uhr

  • @Ed: Hast du meinen Beitrag gelesen? Ich spreche speziell von Konsolen.

    – Sam Harwell

    20. Oktober 2009 um 2:37 Uhr

  • Entschuldigung, ich glaube, ich habe mir tatsächlich einen anderen Beitrag angesehen, als ich ihn verlassen habe. Sie haben Recht, dass (natürlich) virtuelle Maschinen erstellt werden könnten, die auf Konsolen laufen, es ist einfach nicht praktikabel.

    – Ed S.

    20. Oktober 2009 um 5:24 Uhr

Hohe Leistung und die Trägheit von C und C++, die traditionell für Spiele verwendet werden.

Die Auswahl basierend auf der Leistung hat keine so große Priorität, es sei denn, Sie machen eine 3D-Extravaganz.

  • Trägheit ist hier wahrscheinlich das Größte. Java kann sehr schnell sein und die meisten Spiele sind GPU-begrenzt.

    – Byron Whitlock

    14. Oktober 2009 um 23:33 Uhr

  • Nun, Java gibt Ihnen nicht so einfach den Low-Level-Zugriff, den einige Spiele erfordern. Vergessen Sie auch nicht die Konsolenplattformen.

    – Ed S.

    14. Oktober 2009 um 23:37 Uhr

  • Guter Punkt – offensichtlich haben kommerzielle Sachen für Konsolen eine Menge Einschränkungen, wie Sie Ihr Spiel erstellen!

    – xyz

    14. Oktober 2009 um 23:41 Uhr

  • Obwohl diese Intertia nicht ohne Grund ist. Ich bin mir sicher, dass EA inzwischen einen ziemlich robusten Satz von C++- und C-Bibliotheken hat. Ich würde Java für die Spieleserverseite in Betracht ziehen, da es einfach zu skalieren ist.

    – Rechnen

    15. Oktober 2009 um 0:05 Uhr

  • FWIW, Sie können nicht einmal in Java geschriebene Spiele auf PS3, XBOX-360, Wii, PSP, GBC usw. ausliefern. Es ist keine Trägheit, es ist einfach NICHT ERLAUBT.

    – Adissak

    15. Oktober 2009 um 1:34 Uhr

Benutzer-Avatar
Ed S.

Da:

  1. Java wird nicht in nativen Code kompiliert, was bedeutet, dass es bei der ersten Ausführung des Codes zu Leistungseinbußen kommt.
  2. Java gibt Ihnen kein vorhersagbares Speichermodell (Konsolenspiele benötigen dies)
  3. Java gibt Ihnen keine deterministische Objektfinalisierung.
  4. Java ist nicht so nah an der Hardware wie C, was für viele professionelle 3D-Spieleprogrammierung unerlässlich ist.
  5. Konsolenprogrammierer haben wahrscheinlich keine JVM, die auf der PS3, X-Box usw. läuft.
  6. Einbußen bei der Laufzeitleistung.
  7. Sie werden niemals so viel Leistung aus einer Java-App herausholen können wie mit einer C++-App.

Es gibt wahrscheinlich noch mehr Gründe, wie die Tatsache, dass sie bereits vorhandenen Code verwenden, der in C oder C++ geschrieben wurde.

BEARBEITEN: Abgesehen davon glaube ich nicht, dass viele moderne Spiele in C geschrieben sind. OOP eignet sich für die Spieleentwicklung, und C++ ist de facto die Sprache der Wahl.

Ich werde es auch nicht zu meiner Liste hinzufügen, aber wie andere bereits erwähnt haben, gibt es eine Menge bereits existierenden Codes, der sehr gut funktioniert und in der Spieleindustrie verwendet wird. Es wäre nicht praktikabel, alle/die meisten Ihrer Tools neu zu schreiben, nur um zu einer neuen Sprache zu wechseln, insbesondere wenn Ihnen dieser Wechsel viele Kopfschmerzen bereiten könnte.

  • Das beste Spiel aller Zeiten, Quake III Arena, ist in C geschrieben 🙂

    – xyz

    15. Oktober 2009 um 0:24 Uhr

  • C++ != OOP. Es ist ein Werkzeug, das OOP erleichtern kann. Sie können prozeduralen Code in C++ genauso schreiben wie objektorientierten Code in C.

    – Daniel Priden

    15. Oktober 2009 um 0:28 Uhr

  • Das JIT kompiliert Bytecode in nativen Code und profiliert ihn im laufenden Betrieb. Im Prinzip ist JIT-kompilierter nativer Code schneller als im Voraus kompilierter Code, da JIT basierend auf Profilinformationen optimieren kann, was ein AOT-Compiler nicht kann. Ihre Punkte 6 und 7 sind vage und sagen nichts aus.

    – Jesper

    15. Oktober 2009 um 8:18 Uhr

  • Abgesehen von Punkt 4 finde ich Ihre Punkteliste ziemlich vage bzw. irrelevant.

    – Schwimmbad

    11. Februar 2010 um 21:13 Uhr

  • @Jesper, viele gute C/C++-Compiler unterstützen die profilgesteuerte Optimierung. Ich mache Windows-Entwicklung, und MSVC und Intel haben beide Unterstützung dafür. Wenn die für das JIT-Profil optimierte Kompilierung schneller ist als die AOT-Kompilierung, würde ich in meinem aktuellen Projekt die Java-Version von libsvm verwenden. Beim Testen stellte ich fest, dass es 4x langsamer war und dreimal so viel RAM verbrauchte.

    – fabspro

    20. September 2012 um 1:56 Uhr

Benutzer-Avatar
Mike Dinescu

Ich würde sagen, trotz der anderen Antworten, die auf einen Geschwindigkeitsmangel hinweisen, der hauptsächlich durch die JVM verursacht wird, dass der wahre Grund, warum Leute keine Spiele in Java programmieren, die fehlende Unterstützung für Umgebungen wie DirectX und OpenGL ist (die tatsächlich die Notwendigkeit beseitigen). damit Ihr Code in der Nähe der Hardware ist, wie es in einigen Antworten vorgeschlagen wurde). Sie sind die Basis-Frameworks, die Menschen im Allgemeinen zum Programmieren von Spielen verwenden, insbesondere heutzutage, da 3D-Spiele überall zu finden sind – und der Mangel an Unterstützung für sie ist der Grund, warum Java nicht als Sprache für die Spieleentwicklung angesehen wird.

Um meinen Punkt zu unterstreichen, würde ich vorschlagen, dass Sie einen Blick auf Microsoft werfen XNA das derzeit für die Codierung in C# über das .NET-Framework optimiert ist (das wie Java Just-In-Time-Compiled ist und nicht ausgeführt wird nativ an sich). Das XNA-Framework ist mit DirectX verbunden, das Gespräche zur Hardware und ist daher sehr schnell.

BEARBEITEN

Der Kommentar von @Ed Swangren ließ mich noch einen weiteren Unterschied zwischen .NET und Java erkennen, wenn es um die Spieleentwicklung geht. Ich denke, eine weitere Stärke von .NET ist, dass es viel einfacher ist, wenn Sie in der Lage sein müssen, das letzte bisschen Leistung herauszuholen und ein paar Zeigerberechnungen durchzuführen oder einen ausgeklügelten Hochleistungsalgorithmus zu implementieren unsicher Modus. Natürlich können Sie sogar darüber hinausgehen und native Bibliotheken schreiben, die von Ihrem C#-Code verwendet werden, was dank ziemlich einfach ist P/Aufrufen.

Lassen wir C(++) für den Moment beiseite … Ich neige dazu zu sagen, dass der Hauptgrund darin liegt, dass Java so etwas fehlt XNA. Welche Vorteile hat Java bei der Spieleentwicklung eigentlich gegenüber einer Sprache wie C++? Man muss bedenken, dass einige seiner typischen Vorteile für den speziellen Bereich der Spieleentwicklung wegfallen, während C++ einige hinzugewinnt.

XNA hat C# zu einer sehr beliebten Sprache für die Entwicklung von Amateurspielen und entgegen der landläufigen Meinung auch zu einer durchaus praktikablen Option für die kommerzielle Entwicklung gemacht. C#/.NET ist in vielerlei Hinsicht eine Parallele zu Java (und heutzutage wohl ein besseres Framework), wenn die Leute jetzt die Möglichkeit haben, Spiele mit einer höheren Sprache zu entwickeln, scheint C# die viel ansprechendere zu sein, es sei denn, es handelt sich um eine Überschneidung -Plattformunterstützung ist unerlässlich (andererseits haben wir Mono und OpenGL für .NET).

C (oder besser gesagt C++) ist es schon lange das Sprache der Spieleentwicklung aufgrund ihrer Low-Level-Natur (daher Leistungsvorteile) und der Vielzahl von Grafik-Frameworks (DirectX, OpenGL) und Engines, die hauptsächlich auf sie abzielen. Seine Nutzung ist in die Spieleentwicklung eingebettet und wird praktisch seit den Anfängen der Branche genutzt – und wird so schnell nicht verschwinden, vermute ich.

Benutzer-Avatar
Lawrence Dol

  1. Java hat keine so kontrollierbare Leistung
  2. Es ist sehr reversibel, also schwerer zu schützen
  3. Viele Spiele verwenden Skriptsprachen wie Lua oder Python, um eine “höhere” Programmierebene zu erreichen
  4. die API der meisten Systeme ist C-orientiert.
  5. Java kann für Back-End-Serversysteme verwendet werden, mit denen sich Spiele verbinden
  6. Flash-Spiele scheinen die Nische zu sein, die Java-Spiele haben könnten.

Benutzer-Avatar
Jakob Schwarz

Java kann so optimiert werden, dass es sehr schnell ist, wie aus einem Interview hervorgeht, das ich kürzlich mit einem Hochfrequenzhandelsunternehmen geführt habe, in dem neben C++ auch Java verwendet wird.

Java hat OpenGL-Bindungen, wie andere darauf hingewiesen haben, also ist es kein Problem, an die Hardware zu gelangen, besonders da nicht alle Spiele das brauchen, einige kommerzielle Spiele wurden für Java3D geschrieben.

Sie können Scala oder F# verwenden, wenn Sie mehr Leistung für Multithread- oder numerisch intensive Operationen wünschen, und diese einfach mit der GUI verknüpfen.

Aber wie andere bereits erwähnt haben, sind die verwendeten Tools in der Regel für C++ geschrieben, und einige Unternehmen fühlen sich wohler, wenn sie einige Optimierungen in der Assemblierung vornehmen, aber angesichts der Tatsache, dass die neuen CPUs mit Multicores sehr kompliziert sind, ist dies unwahrscheinlich Sie werden gegenüber den Optimierungen der Compiler keine Leistungssteigerung erzielen, aber solange die Unternehmen der Meinung sind, dass diese Optimierungen noch erforderlich sind, werden sie bei C++ bleiben.

Wenn einige Entwickler kommerzielle Tools für Java oder .NET schreiben wollten, könnte sich dort eine Marktchance ergeben, aber es wird eine Menge Arbeit sein, es so gut wie das zu machen, was bereits da draußen ist.

  • Sie sagen, dass Programmierer anstelle von C/C++ Java, Scala/f# und Java3d verwenden und ein neues Windowing-Toolkit lernen sollten, um Spiele zu schreiben? Was sind die Strafen beim Aufrufen zwischen Java und F #? Auch Assembly-Optimierungen sind heutzutage sehr selten, es werden jedoch andere Dinge berücksichtigt (z. B. Cache-Kohärenz und Speicherfragmentierung).

    – fabspro

    20. September 2012 um 2:04 Uhr

  • @fabspro – Ich würde Java3D jetzt nicht verwenden, da Oracle sich mehr in Richtung JavaFX bewegt, aber es gibt einige anständige Scala-3D-Bibliotheken, und F # kann jede .NET-Bibliothek verwenden. Computer sind schnell genug und die Kompilierung in Echtzeit ist gut genug, sodass Scala- und C#/F#-Strafen für viele Spiele reduziert werden. Ein Vorteil der Verwendung von Java und OpenGL besteht darin, dass Sie die OpenGL-Arbeit bereits erledigt haben, wenn Sie das Spiel auf Smartphones übertragen möchten. Wählen Sie das Werkzeug, das für die Aufgabe am besten geeignet ist.

    – Jakob Schwarz

    20. September 2012 um 14:32 Uhr


  • Das ist eine faire Antwort. Um ehrlich zu sein, habe ich nie darüber nachgedacht, Scala für Spiele zu verwenden, also werde ich eines Tages dank Ihnen eine Scala-Lernsitzung haben.

    – fabspro

    21. September 2012 um 1:57 Uhr

  • @fabspro – Sie können sich über die funktionale Programmierung informieren und die Techniken in OOP verwenden. Wenn Ihre Welt beispielsweise unveränderlich ist, können Sie separate Threads für verschiedene Teile der Spielschleife haben und müssen sich keine Gedanken über Synchronisierungsprobleme machen.

    – Jakob Schwarz

    22. September 2012 um 0:44 Uhr

1344650cookie-checkC vs. Java für die Spieleprogrammierung [closed]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy