Ich bin kein Spieleentwickler oder so, aber ich weiß, dass Java für die Spieleentwicklung nicht sehr verbreitet ist. Java sollte für die meisten Spiele schnell genug sein. Wo ist also der Haken? Ich kann mir einige Gründe vorstellen:
- Mangel an Spielentwicklern mit Java-Kenntnissen
- Fehlende gute Spielentwicklungs-Frameworks
- Programmierer möchten Java nicht als Programmiersprache für Spiele akzeptieren. Akzeptieren die meisten nur C ++ als das?
- Keine Unterstützung für Spielekonsolen (obwohl der PC-Markt noch besteht)
Es könnte natürlich etwas anderes sein. Könnte jemand, der das Geschäft besser kennt als ich, erklären, warum Java bei der Spieleentwicklung nicht an Fahrt gewinnt?
java
game-development
Anto
quelle
quelle
Antworten:
Mehrere Gründe:
Java wird heutzutage hauptsächlich in Android-Spielen verwendet, einfach weil es die Hauptsprache für diese Plattform ist.
quelle
malloc
oder möglich.new
Wenn Sie also Bedenken haben, werden Sie Pooling implementieren, egal was passiert . Unabhängig davon besteht ein großes Problem bei Java darin, dass es im Gegensatz zu C # keine Wertetypen unterstützt.Technische Gründe:
Nichttechnische Gründe:
Interessanterweise gibt es auch einige gute Gründe, warum Spieleentwickler Java in Betracht ziehen sollten :
quelle
Okay, es gibt viele Fehlinformationen in diesem Thread.
Ich kenne das Spielegeschäft sehr gut, seit 25 Jahren. Ich kenne Java in Spielen auch sehr gut, da ich Suns technischer Evangelist für Java-Spiele und Dozent für Java-Performance-Programmierungsexperte war.
In Bezug auf die Rechengeschwindigkeit übertrifft Java C ++ heutzutage in vielen Benchmarks für wissenschaftliches Rechnen. Sie können pathologischen Code in jeder Sprache schreiben, die schlecht abschneidet, wenn Sie möchten, aber insgesamt sind sie gleichwertig und schon lange.
In Bezug auf die Speichernutzung hat Java einen gewissen Overhead. HelloWorld ist ein 4K-Programm in Java. In heutigen Multi-GB-Systemen ist dieser Aufwand jedoch ziemlich bedeutungslos. Schließlich hat Java mehr Startzeit. Ich würde nicht empfehlen, Java für kurze Laufzeitprogramme wie Unix-Kommandozeilenbefehle zu verwenden. In diesen Fällen dominiert das Starten Ihre Leistung. In einem Spiel ist es jedoch ziemlich unerheblich.
Bei ordnungsgemäß geschriebenem Java-Spielcode treten keine GC-Pausen auf. Genau wie C / C ++ - Code erfordert es eine aktive Speicherverwaltung, jedoch nicht auf der Ebene von C / C ++. Solange Sie Ihre Speichernutzung für langlebige Objekte (die für ein ganzes Level oder ein Spiel bestehen) und für sehr kurzlebige Objekte (Vektoren usw., die nach der Berechnung herumgereicht und schnell zerstört werden) beibehalten, sollte gc kein sichtbares Problem sein.
Bezüglich des direkten Speicherzugriffs hat Java dies für eine lange Zeit getan; seit Java 1.4 in Form von Native Direct Byte Buffers. Bit Twiddling in Java kann aufgrund des Fehlens von vorzeichenlosen Integer-Typen etwas ärgerlich sein, aber die Arbeitsrunden sind alle bekannt und nicht besonders lästig.
Während sein wahres Java noch nie eine Direct3D-Bindung hatte, ist dies darauf zurückzuführen, dass Java-Technologien Portabilität anstreben. Es verfügt über ZWEI OpenGL-Bindungen (JOGL und LWJGL) und OpenAL-Bindungen (JOAL) sowie eine portable Eingabebindung (JInput), die unter Windows an DirectInput, unter OSX an HID Manager und eine Linux-Bindung (ich vergesse welche) gebunden wird.
Es ist wahr, dass keine vollständige Game-Engine Java wie Unity unterstützt, und das ist eine Schwäche im unabhängigen Bereich. Auf der anderen Seite gab es zwei gute APIS auf Scenegraph-Ebene, die plattformunabhängig für Windows, OSX und Linux waren. Beide wurden von Josh Slack geschrieben, der erste hieß JMonkey Engine und der zweite Ardor3D.
Das Top-Poster zeigt, dass die beiden größten Hindernisse für Java bei der Spieleentwicklung Vorurteile und Portabilität waren. Letzteres war das größte Problem. Obwohl Sie ein Java-Spiel schreiben und es unter Windows, OSX und Linux ausliefern konnten, gab es nie eine Konsolen-VM. Dies war auf die völlige Unfähigkeit des Sun Middle Management zurückzuführen. Die wenigen von uns, die in Spielen an Java arbeiteten, hatten mindestens dreimal mit Sony zu tun, um eine VM auf einer Playstation zu bekommen, und alle dreimal, wenn das mittlere Sun-Management es tötete.
Während Sun mit Client-Technologien flirtete, war es eine Tatsache, dass das Sun-Management niemals Konsumgüter bekam. Das ist der Grund, warum Java als Client-Sprache von Sun in keiner Form erfolgreich war und warum Google und Dalvik (die Java-ähnliche Android-VM) erforderlich waren, um Java überall zu einer erfolgreichen Plattform zu machen.
Und deshalb programmiere ich heute Spiele in C #. Weil Mono dahin ging, wohin sich das Sun-Management geweigert hatte.
quelle
Java eignet sich hervorragend für Geschäftslogik, Server und plattformunabhängigen Code, der zuverlässig ausgeführt werden muss. Es gibt verschiedene Faktoren, warum Java in Spielen nicht oft verwendet wird:
Es ist nicht einfach, mit C ++ - Bibliotheken aus Bytecodesprachen wie Java (Schreiben einer JNI-Schicht) und .net (viele Marshalling- / Unmarshalling-, API- / Strukturattribute) zu arbeiten. Es ist also ein ziemlicher Arbeitsaufwand bei geringem Nutzen.
Eine Randnotiz: Einige Spieleserver verwenden Java.
Ein ähnlicher Beitrag ist hier zu finden : https://stackoverflow.com/questions/1034458/why-arent-video-games-written-in-java
quelle
Java ist für die meisten Spieleentwicklungen nicht schnell genug. Es ist viel langsamer als die Verwendung von C ++ / Assembly, was der Standard ist. Es ist der gleiche Grund, warum mehr Spieleentwicklung nicht mit C # oder VB gemacht wird. Spieleentwickler benötigen und planen jeden letzten Taktzyklus, den sie für Aufgaben wie physikalische Berechnungen, KI-Logik und Interaktionen mit der Umgebung benötigen.
Für einfachere Spiele könnte Java sehr effektiv eingesetzt werden. Wenn Sie einen Tetris-Klon oder Bejeweled oder etwas anderes mit diesem Detaillierungsgrad erstellen möchten, funktioniert Java einwandfrei. Aber Java kann unmöglich Spiele wie Halo, Medal of Honor, Command & Conquer usw. erstellen und spielbar machen. Zumindest wie es heutzutage existiert.
Und die Gründe, die Sie in Ihrer Frage auflisten, sind ebenfalls gültig. Ausgenommen, ich denke, für den Mangel an Spieleentwicklern mit Java-Kenntnissen. Viele Spiele auf Handys und anderen tragbaren Geräten sind in Java geschrieben (einschließlich der meisten Android-Spiele), und einige der Spiele sind ausgezeichnet. Ich denke, es gibt eine anständige und wachsende Basis von Spieleentwicklern mit Java-Kenntnissen.
Der Gedanke ändert sich hinsichtlich der Fähigkeit, diese höheren Sprachen für einige der fortgeschritteneren Spiele zu verwenden. Zum Beispiel ist eines meiner Lieblingsspiele, Auran's Train Simulator, mit großen Teilen in C # geschrieben und es funktioniert ziemlich gut. Die Basis wächst also und wird sich weiterentwickeln.
quelle
In modernen Spielen dreht sich alles um 3D-Grafiken, die auf Spezialhardware ausgeführt werden.
Bereits im Jahr 2002 stellte Jacob Marner in seinem Bericht "Evaluating Java for Game Development" fest, dass Java mit Ausnahme der leistungsabhängigsten Teile durchaus für Spiele geeignet ist und aufgrund der Robustheit der Sprache und der zugrunde liegenden JVM billiger ist um es so zu machen.
http://java.coe.psu.ac.th/FreeOnline/Evaluating%20Java%20for%20Game%20Development.pdf
Ich persönlich bin der Meinung, dass dieser Nachteil mit den Fortschritten, die seitdem vor allem in der 3D-Grafik zu verzeichnen sind, und mit den hervorragenden Bindungen an OpenGL et al. Heutzutage viel weniger ausgeprägt ist.
Daher muss das Problem woanders liegen. Ein wahrscheinlicher Grund ist die Größe der Java-Laufzeit (die heutzutage bei Multi-DVD-Spielen weitaus weniger ein Problem darstellt) und ein anderer die Trägheit des vorhandenen Codes. Es ist bekanntermaßen spröde, mit nativem Code in Java zu arbeiten. Ein dritter Grund ist der, mit dem die Star-Entwickler, die die Spiele entwickeln, vertraut sind. Ein vierter ist, ob Java überhaupt auf der Plattform verfügbar ist.
Eines ist jedoch sicher: Die meisten Spiele werden skriptfähig, anstatt von Anfang an alles in C-Code zu brennen, und Sie möchten die beste Laufzeit unter Ihrer Skriptsprache. In diesen Tagen bedeutet dies im Wesentlichen entweder die CLR oder die JVM.
quelle
Spieleentwickler sind gerne nah am Metall und schreiben oft ihre engen inneren Schleifen beim Zusammenbau. Java bietet nicht die gleiche Leistung, sowohl was die Geschwindigkeit als auch die Speichernutzung betrifft.
quelle
Ich denke, der limitierende Faktor für die meisten Leute ist die (fehlende) Verfügbarkeit guter Game-Engines. Um weit zu kommen, müssen wir uns ansehen, warum diese nicht verfügbar sind.
Ich würde das für einen Moment aus der anderen Richtung betrachten. Das Entwickeln einer Game Engine (zum Beispiel) ist eine Menge Arbeit. Wer würde genug von der Entwicklung eines solchen Systems profitieren, um die Zeit und den Aufwand dafür zu investieren?
Die meisten offensichtlichen Kandidaten für eine Framework-ähnliche Entwicklung in / für Java (z. B. IBM, Oracle) scheinen kein Interesse an Spielen zu haben. Die offensichtlichen Kandidaten für die Spieleentwicklung (z. B. Id, EA) scheinen fast ebenso wenig Interesse an Java zu haben.
Fast der einzige Kandidat, an den ich denken kann, scheint überhaupt vernünftig, wäre Google. Die primäre Entwicklungssprache für Android ist Java, und die Förderung der Spieleentwicklung für Android könnte der Plattform einen echten Vorteil verschaffen.
Soweit ich weiß, haben sie dies (noch?) Nicht getan, was für fast alle anderen ziemlich strenge Grenzen lässt. Die Verwendung von Java für moderne, leistungsstarke Spiele-Engines ist mit einem erheblichen Mehraufwand verbunden, mit (meiner Meinung nach) geringen Aussichten, im Gegenzug für diese Mehrarbeit eine Menge Vorteile zu erzielen.
quelle
Die Frage ist gleichbedeutend mit folgenden Fragen:
Was ist besser, um Ihr Auto, ein Bootsmotor oder ein Düsentriebwerk anzutreiben?
Es kommt auf Skalierbarkeit, Fehlervermeidung, Geschwindigkeit, Speichersignatur, Modularität und eine ganze Reihe von Dingen an. Die Frage sollte nicht sein, was als Industriestandard besser ist, sondern "was ist besser für mich", wie in dem, was Sie wissen oder wie gut Sie es wissen. Wenn es den Job macht, dann macht es den Job, wenn Sie die Idee tatsächlich verkaufen können, dann funktioniert es und wer weiß, Sie könnten sogar ein paar Löffel biegen.
quelle
Java wurde nicht für die Spieleentwicklung entwickelt, Java wurde als Sprache "für das Web" konzipiert.
Bei der Spieleentwicklung hat Sun Java als Spieleentwicklungssprache nicht wirklich unterstützt, da Microsoft C # unterstützt.
Ich denke, das Fehlen überzeugender Frameworks für die Spieleentwicklung hat Java in dieser Hinsicht wirklich umgebracht.
quelle
Es ist einfacher, C direkter auf brandneue, unkonventionelle Hardware und Treiber zu kleben. Je früher und näher ein Spielprogrammierer an die Hardware herankommt, desto besser kann er konkurrierende Spiele übertreffen. Spätere Spielprogrammierer bleiben bei der gleichen Methodik und den gleichen Werkzeugen wie die zuvor erprobten Spiele.
Bei Spielen, bei denen die Optimierung auf die neueste Hardware weniger wichtig ist, wie beispielsweise bei Gelegenheitsspielen für Mobiltelefone, ist die Verwendung von C auf diese Weise weniger wichtig als die größere Portabilität von Java.
quelle
Für manche Menschen hat Grund nichts mit Geschwindigkeit, Bibliotheken oder Verfügbarkeit zu tun. Es liegt einfach an der Sprache selbst. Manche Leute mögen Java einfach nicht. Andere verwenden lieber ihre Lieblingsprogrammiersprache als Java, um Spiele zu erstellen.
quelle
Es ist eine interpretierende Sprache, dh langsam. Sie haben es mit Grafik und Grafikkarte zu tun, die Hardware sind. Was ist eine gute Sprache für den Umgang mit Hardware? Nun, C ++ ist ziemlich niedrig und Sie beschäftigen sich mit Zeigern und was auch immer.
Wenn Sie verrückte Grafiken wie Crysis und was auch immer herauspumpen möchten, werden Sie Java dafür nicht tun.
Nicht nur das, Oracle besitzt Java, der Gedanke, dass ein Unternehmen Sie verklagen kann, ist nicht gut. Vor allem, wenn Sie einen eigenen Interpreten für JAVA erstellen möchten, der auf Spiele abzielt, ohne wegen Fragmentierung von FUD zu klagen.
quelle