Kommentare
- Ist ' nicht Minecraft mit Java gebaut? Oder hauptsächlich OpenGL? Oh, und schauen Sie sich C # an, wenn Sie nicht zu 100% auf Java eingestellt sind, da es fantastisch ist.
- Warum ' kommen Sie nicht zum Stapelüberlauf-C ++ – Chat ? Wir lieben C ++, wir denken, dass es absolut richtig verwendet werden kann, und wir wissen, wie man das macht, und wir ' würden uns sehr freuen, es zu teilen.
- Minecraft ist Java + LWJGL + Notch ' Codierungsfähigkeiten, so leistungsmäßig ist es SCHRECKLICH.
- Ob Ihre Codierungsspiele oder irgendetwas anderes, sich in eine einzige einschließen Sprache wird dir in Zukunft nicht helfen. Verzweigen Sie ein bisschen, entweder C ++ oder etwas anderes wie Python. Es braucht Zeit, aber es macht dich zu einem besseren Entwickler.
- Du ' wirst eine Menge Fehlinformationen bekommen, weil die Java / C ++ – Kriege hell brennen Ich bin bereit, nach konkreten Beispielen zu fragen, bevor ich eine Meinung akzeptiere, und auch mehr selbst zu recherchieren =) Trotzdem stimme ich @loganfsmyth zu, dass Sie viele Sprachen beherrschen müssen, denn nur dann können Sie das richtige Werkzeug für jede Aufgabe auswählen . Wenn Sie in naher Zukunft nur " Spielstilprogrammierung " lernen möchten, verwenden Sie das, was Sie ' ist mit (Java) vertraut und lernt später C ++. Heck, später machen Sie möglicherweise Content-Pipelines in C # und Spiele in Java ME, schwer vorherzusagen =)
Antwort
Ja, überprüfen Sie diese Liste auf einen Beweis. Dies sind einige Spiele, die mit Java unter Verwendung der Lightweight Java Game Library (LWJGL) erstellt wurden. Es ist ein Low-Level-Framework, das OpenGL für hochwertige Grafiken und OpenAL für Sounds bietet. Es bietet auch eine Eingabe-API. Mit diesen können Sie ganz einfach mit der ernsthaften Spieleentwicklung in Java beginnen.
Ich schreibe gerade mein zweites 3D-Spiel als Hobbyprojekt in Java und ich liebe es einfach. Früher habe ich meine Spiele mit C ++ geschrieben, aber nach dem Wechsel zu Java gibt es kein Zurück mehr. Die Unterstützung mehrerer Betriebssysteme mit Java kann sehr einfach sein. Beispielsweise funktionierte mein vorheriges Java-Spiel, das ich ein Jahr lang unter Windows entwickelt hatte, sofort unter Linux und unter OS X mit nur einem Fehler, ohne dass auf diesen Plattformen etwas kompiliert werden musste.
Andererseits haben Sie mit Java einige Probleme.
- Garbage Collector. Wie bereits erwähnt, ist die nicht deterministische Speicherverwaltung ein Problem, und Sie müssen dies berücksichtigen.
- Fehlende Bibliotheken von Drittanbietern. Die meisten verfügbaren Bibliotheken unterstützen Java nicht. Auf der anderen Seite haben Sie immer die Möglichkeit, diese nativen Bibliotheken auch von Java aus aufzurufen, aber es ist mehr Arbeit, dies zu tun. Es gibt auch Java-Ports oder vorgefertigte Wrapper für gängige Bibliotheken, zum Beispiel verwende ich JBullet – Java-Port der Bullet Physics Library . Auf der anderen Seite ist in Java eine riesige Klassenbibliothek integriert, wodurch der Bedarf an Bibliotheken von Drittanbietern, die nicht mit Spielen zusammenhängen, verringert wird. Der Mangel an Bibliotheken war für mich kein Problem, aber ich kann mir vorstellen, dass es für andere sein kann.
- Java wird von gängigen Spielekonsolen nicht unterstützt und es gibt bisher keinen einfachen Wechsel zu denen von Java wie ich weiss. Auf der anderen Seite verwendet Android, eine beliebte mobile Plattform, eine Form von Java. Dies ist auch eine Option, aber nicht derselbe Java-Code, der sowohl auf einem PC als auch auf einem Android-Gerät funktioniert.
- Kleinere Community. Die meisten Spielprogrammierer verwenden C ++ und mögen Java meiner Erfahrung nach oft nicht. Ich erwarte nicht so viel Hilfe von anderen. Erwarten Sie nicht, einen Job in der Spieleentwicklung ohne C ++ – Kenntnisse zu bekommen.
Antwort
Nicht wirklich. Hier „s die Sache – erstens gibt es sehr wenig in Bezug auf vorhandene Bibliotheken für Java im Vergleich zu praktisch allem , das für C ++ ist.
Zweitens, Java als Sprache einfach eignet sich nicht gut für die Spieleentwicklung – ich meine zum Beispiel, wenn Sie sich mit GPU-Puffern beschäftigen, bietet Java keine Sprachfunktion, die Ihnen dabei hilft, sicherzustellen, dass sie korrekt gesperrt und entsperrt oder entsorgt werden (C ++) Außerdem gibt es das Leistungsproblem – und der GC ist nicht deterministisch, was für ein Spiel sehr schlecht ist.
Ich habe noch nie ein Nicht-Indie-Spiel beobachtet, das viel Zeit in einem Spiel verbracht hat Eine Sprache, die vor der Ausführung nicht zu nativem Code kompiliert wurde, und sogar die Indie-Spiele, die dies tun, sind eine Seltenheit.Daher glaube ich derzeit, dass dies einfach nicht möglich ist.
Auch wenn ich Java jetzt weiter lerne und verbessere, stellt sich heraus, dass dies später der Fall ist Ich muss C ++ lernen. Wird es schwierig sein, den Wechsel zu machen?
Ja, absolut wird es. Java und C ++ unterscheiden sich trotz ihrer oberflächlichen syntaktischen Ähnlichkeiten stark voneinander. Java-Erfahrung zählt beim Erlernen von C ++ praktisch nichts.
Das Gameplay über Grafiken ist eine gute Wahl, und Sie können dies am Erfolg von Spielen wie Terarria und Minecraft erkennen. Wenn Sie jedoch beabsichtigen, srs-Grafiken zu erstellen, ist dies in Java nicht möglich.
Kommentare
- +1, da er Heavy angegeben hat Grafik, schnelles Spiel ohne Verzögerung.
- Java ' Das Fehlen von nicht signierten Datentypen steht ebenfalls dagegen. Ja, Sie können es umgehen, aber es ' ist nicht ideal und Sie ' verwenden Code, der ' nicht wirklich das widerspiegelt zugrunde liegende Daten korrekt.
- @deadmg Wenn gesperrt und entsperrt ist, beziehen Sie sich auf einige DirectX-API-Funktionen? & Können Sie Sagen Sie mir, was ' so schlecht an einer nicht deterministischen GC ist.
- Eine nicht deterministische GC kann dem Löschen von Frames gleichkommen, wenn Sie einen schlechten Stopp erhalten Die Welt pausiert und es sperrt die Dinge länger als nötig, um den Frame zu rendern. In der Praxis passiert dies ' nicht wirklich oft / nie, wenn Sie Ihr Gedächtnis planen Verwenden Sie die Kollektoren von JVM ' können für eine niedrige Pause konfiguriert werden (innerhalb sicherer Grenzen für das Löschen von Frames). Trotzdem macht es ' keine lustige Sache, sich damit befassen zu müssen. Am Ende müssen Sie erhebliche Mengen der Produktivität zurückgeben, die Sie beim Verlassen von C ++ erzielt haben.
- Ein Start, den Sie ' komplett neu schreiben müssen.
Antwort
Ich meine es also sehr ernst Spielentwicklung, ist Java immer noch eine gute Wahl? Ich habe mehrmals versucht, C ++ zu lernen, aber ich mag die Sprache nicht wirklich. Ich weiß nicht wirklich warum, aber normalerweise kann ich die Themen nie verstehen, wenn ich versuche zu lernen.
Wenn Sie sich für Java entschieden haben, weil Sie C ++ nicht verstehen konnten, sind Ihre Java-Programme für hochwertige Grafiken nicht schnell genug. Die Verwendung einer höheren Sprache sollte darauf zurückzuführen sein, dass Sie dadurch produktiver werden, und nicht darauf, dass Sie die Sprache auf niedrigerer Ebene nicht verstehen können.
Ich denke nicht, dass es eine völlig schlechte Idee ist, ein Spiel zu schreiben Java, besonders wenn das Spiel einfach ist, aber Sie werden sofort auf Leistungsprobleme in Java stoßen, wenn Sie es als Krücke verwenden.
Kurz gesagt, kann Java für eine ernsthafte Spieleentwicklung ernst genommen werden. Dazu gehören umfangreiche Grafiken, schnelles Spielen ohne Verzögerung und möglicherweise ein einfacher Wechsel zu Konsolen?
-
Schwere Grafiken: Möglich, aber Sie werden in Java / LWJGL dasselbe tun wie in C ++ / GL: Bytes in GPU-Puffer schreiben und / oder die verwenden veraltete Anzeigelisten wie Minecraft. Wenn Sie die Speicherverwaltung nicht verstehen, werden Sie dies auch nicht richtig machen.
-
Schnelles Spiel ohne Verzögerung: Keine leichte Aufgabe in jeder Sprache, und es ist wahrscheinlicher, dass Sie sich in beide Richtungen in den Fuß schießen, ohne darüber nachzudenken.
-
Nein, Java wird auf Konsolen nicht verfügbar sein.
Kommentare
- Als Nebenfrage: Was hat die Anzeigelisten ersetzt, als sie veraltet waren?
- @Suds: Programmierbare Pipeline, glaube ich.
- ha! Hat sie bereits behandelt. VBOs : gamedev.stackexchange.com/questions/22170/…
- Mobile Plattformen könnten sein Ich weiß, dass er wahrscheinlich über die großen Drei gesprochen hat, aber Android verwendet Java und es werden viele Spiele dafür erstellt.
- @ Amplify91 Ja, einige Spiele sind in Java für Android geschrieben. Aber die meisten gut Spiele und wahrscheinlich alle grafikintensiven oder plattformübergreifenden Spiele werden mit dem Android NDK in C ++ geschrieben.
Antwort
Ein Experiment ienced Programmierer kennen im Allgemeinen viele Programmiersprachen – das Erlernen zusätzlicher Programmiersprachen ist nicht allzu schwierig, wenn Sie eine gut kennen. Ich würde jedoch dringend empfehlen, dass C ++ nicht Ihre erste Sprache und wahrscheinlich auch nicht die zweite Sprache sein sollte.
Dies liegt daran, dass C ++ einen großen Teil seiner Effizienz erzielt, wenn keine signifikante Laufzeitfehlerprüfung durchgeführt wird. Wenn Sie beispielsweise in Java auf ein Element am Ende eines Arrays zugreifen, wird immer eine Ausnahme ausgelöst, die dem Programmierer genau mitteilt, was falsch ist.In C ++ haben Sie möglicherweise Glück und es stürzt sofort ab, aber sehr häufig werden einige andere Daten stillschweigend verworfen, und der Fehler wird erst viel später angezeigt
Ich würde vorschlagen, dass Sie sich vorerst an Java halten (oder zu C # wechseln, wenn Sie das bevorzugen). Auf diese Weise können Sie Dinge schneller erledigen als mit C ++, und die Leistung auf einem PC sollte kein Problem sein.
Denken Sie daran, C ++ zu lernen, nachdem Sie einige Projekte in sichereren Sprachen abgeschlossen haben. C ++ ist das, was Sie für die meisten professionellen Spieleentwicklungsjobs benötigen.
Beachten Sie, dass Sie mit Ausnahme von C # / XNA, wenn Sie ein Spiel erhalten, das Sie mindestens auf eine Konsole geschrieben haben, eine Firma mit gründen müssen ein Büro und verfügen über ein großes Budget für Entwicklungshardware und andere Ausgaben.
Kommentare
- Dies gilt auch ausnahmsweise, da andere Sprachen außerhalb von C ++ dies tun Geben Sie Ihnen das Gefühl, etwas erreicht zu haben. C ++ kann Hunderte von Stunden dauern, bis sich nichts anfühlt. Wenn Sie zuerst andere Sprachen lernen, werden Ihre Füße nass.
- Ihre Kommentare zur Fehlerbehandlung sind wirklich Informationen zu C (und sogenanntem C ++ – Code, der wirklich C ist). C ++ verfügt über Standardbibliotheken (und Standardvorlagenbibliotheken), die eine viel bessere Fehlerbehandlung aufweisen als von Ihnen beschrieben. C ++ verfügt auch über vom Hersteller bereitgestellte Bibliotheken (z. B. MFC) Angemessene Fehlerbehandlung.
Antwort
Haftungsausschluss: Dies beantwortet Ihre Frage nicht genau. Ich habe jedoch versucht, (kurz) einige Punkte zu erwähnen, die für Sie von Interesse sein könnten.
Der Grund, warum Sie so viel über C ++ sehen, ist, dass C ++ immer noch der Industriestandard ist – die häufigste Sprache für Konsolen usw.
Java wird nicht häufig verwendet. Minecraft ist ein ziemlich beliebtes Spiel, das es mit Java groß gemacht hat. Aber grafisch ist es nicht so toll. Spiral Knights ist nicht schlecht – auch in Java hergestellt, mit bedeutenden Grafiken.
Wenn Sie Java mögen, ist C # in der Syntax sehr ähnlich, mit dem Vorteil, dass dies möglich ist Interop mit C ++ – so können bei Bedarf einfache Aufgaben in C ++ erledigt werden. Unity kann C # für die Skripterstellung verwenden, und XNA ist eine ausgezeichnete Wahl.
Auch hier ist Java nicht weit verbreitet. Wenn Sie möchten Ich denke, Sie werden feststellen, dass C # ein sehr ähnliches, sehr angenehmes Codierungserlebnis ist.
Ich hoffe, Ihre Träume schaffen es, es macht viel Spaß 🙂
Kommentare
- Viele, viele Ungenauigkeiten in diesen Beiträgen. Minecraft " schlecht " Grafiken hängen nicht (stark) mit der Sprache zusammen. MC schlechte Leistung hängt direkt damit zusammen, dass Java eine schlechte Sprache für Spiele ist, weil RIESIGE Leistungsprobleme auftreten, und LWJGL ist aus demselben Grund eine ungeeignete Bibliothek für große Codierungsprojekte Aber der größte Faktor war Notch
schlechte Codierung und Implementierung, die langsam behoben wird. Mit C # erhalten Sie alle Funktionen des verwalteten Speichers ohne die meisten Java-Leistungsprobleme. Der Nachteil ist, dass C # sowohl für Spiele als auch für Anwendungen stark auf Microsoft ausgerichtet ist.
- @EfEs: Ich hasse es, es Ihnen zu brechen, aber verwalteter Speicher ist für Spiele schrecklich und Personen, die Spiele in XNA codieren, müssen mehr Zeit für die Speicherverwaltung aufwenden als Personen, die in C ++ codieren. Die nicht deterministische Natur des GC bedeutet, dass Sie praktisch alles zusammenfassen und eine Zuordnung wie die Pest vermeiden müssen – nicht die Art und Weise, wie die Sprache verwendet werden sollte.
- Diese Antwort sollte nicht 100% genau sein ;; Ich habe nur Beispiele angeführt, von denen ich vage weiß. Fühlen Sie sich frei für DV.
- @DeadMG Ich weiß, dass C ++ der richtige Weg ist. Ich habe nur versucht zu erklären, dass C # für Spiele besser ist als Java.
- Eine lange Zeit C # zu sein Entwickler (nicht Spieleentwickler gedacht) Ich glaube, dass Pooling und Speicherverwaltung große Probleme für jedes schlecht gestaltete System sind. Menschen mit der C / C ++ – Denkweise und den mir bekannten Entwicklungsweisen greifen kaum in die verwalteten Speicher-, Design- und Architekturmuster ein, die verwendet werden müssen, und nutzen sie in einer Sprache wie Java / C #. Ich versuche nicht zu sagen, dass C / C ++ – Techniken oder -Produkte schlecht sind, aber selbst wenn Sie einfachere Syntaxsprachen (wie Java und C #) verwenden, benötigen Sie noch viel Erfahrung, um Ihr Spiel richtig zu gestalten Weg.
Antwort
Sieh mal, die einfache Antwort auf „Ist Java realisierbar für Spieleentwickler „ist ein offensichtliches Ja. Sie können jede Programmiersprache verwenden, um Spiele zu erstellen. Das bedeutet nicht, dass Sie sein sollten.
Wahrscheinlich genau das, was Sie von C ++ abschaltet ( Low-Level-Speicherverwaltung, kein Garbage Collector, die auf Zeiger, Strukturen wie Arrays usw. achten muss. sind genau die Dinge, die Sie lernen sollten, wenn Sie einen Computer ausnutzen möchten Ressourcen am effizientesten .Ihre Spiele laufen am besten, wenn Sie die Ressourcen des Computers am effizientesten nutzen.
Java führt einige Dinge aus (z. B. die Überprüfung der Array-Grenzen), die den Betrieb nur verlangsamen. In diesen optimierten Java Perlin-Rauschbeispielcode, kommentierte der Autor „(Array-Zugriff ist viel langsamer als Mitgliederzugriff)“. Diese Art von Dingen ist aus einem C ++ – Hintergrund ziemlich kontraintuitiv Java, solche Dinge sind.
Ich sage, hör auf, der Kugel auszuweichen, lerne C ++ und benutze sie.
Antwort
Dies beantwortet Ihre Frage nicht. Die Grafik- und Konsolenprobleme scheinen etwas zu sein, das Sie unbedingt berücksichtigen müssen. Auch GC wirkt sich auf die Leistung aus. Aber worüber ich schreibe:
Wenn Sie große, komplexe OO-Programme schreiben, schreiben Sie sie in Java fünfmal schneller als in C ++. Auch die Wartung wird erheblich einfacher. Ich wechselte (zugegebenermaßen für Nicht-Spielesoftware) und meine Produktivität stieg sprunghaft an. C #, eine andere gute Alternative, ist schwieriger zu lernen als Java, weil es viel mehr davon gibt. Wenn Sie es wissen, können Sie Code noch schneller schreiben als in Java, es bietet Ihnen viele Tricks. Ich finde diese Tricks jedoch kann die Wartung erschweren. Und dann gibt es noch Java-Dokument, das mit den Sun-Bibliotheken und Ihren eigenen alten Code hilft. C # hat nichts Vergleichbares.
Ich habe ein großes haariges Spiel in Java gemacht und fand die Sprache perfekt, aber meine Grafiken waren elementar und es war kein „Shooter“, bei dem eine Zehntelsekunde eine Ewigkeit für die war Spieler. Außerdem erwarte ich, dass ich später noch viel hinzufügen werde, während ich denke, dass die meisten Leute einfach ein brandneues Spiel schreiben.
Antwort
Sie sollten dies in der Sprache tun, die Sie am besten kennen, bis Sie sich eine formale Ausbildung (Bachelor of Science?) in Informatik leisten können, wobei der Schwerpunkt auf Spieledesign liegt . Sie könnten möglicherweise Ihr Spiel verwenden, um ein Stipendium zu erhalten, insbesondere wenn Sie sagen können „Ich habe dies ohne formale Ausbildung in Java getan“
Moderne JVMs, Sogar der von Oracle hat viele, viele Funktionen, um die Bedenken auszuräumen, die die Leute hier angesprochen haben. Sie können verschiedene Garbage Collectors verwenden, um ein deterministischeres Garbage Collector-Verhalten zu erzielen. Ich habe keine umfangreichen Erfahrungen mit den 3D-Bibliotheken – nur wenig mit Java3D -, aber hier scheint sich niemand darüber beschwert zu haben. Die Escape-Analyse ermöglicht jetzt die Elision von Sperren und eine viel schnellere / vernachlässigbare Zuordnung sehr kurzlebiger Objekte. P. >
Das Problem ist, ob Sie Java von C ++ wählen, Sie müssen lernen, wie man Parallelität richtig verwendet, und ein gutes Verständnis der Speicherverwaltung haben. Schließlich können Sie mit malloc
genauso einfach Fehler machen wie mit new
. Ich weiß nicht, wie die Tools für C ++ aussehen, aber die Profiling-Tools für Java sind recht einfach zu verwenden, kostenlos und in die IDE integriert. Sie können sie verwenden, um Leistungsprobleme aufzuspüren und zu lernen .
Kommentare
- Die formale Ausbildung in CS ist für tatsächliche Programmierkenntnisse in jeder Disziplin eine Scheiße wert. Ich würde wissen, ich ' bin in meinem dritten Jahr.
- Ich stimme DeadMG definitiv nicht zu. Nachdem ich Kurse abgeschlossen und ausgewählt hatte, die mir gefallen, erhöhte CS meine Spielentwicklungsfähigkeiten von 10% auf 100% div id = „457f10ef6a“>
bringt mir nicht Benutzeroberfläche, Ikonographie usw. bei, sondern tatsächliche, echte Codierung.