Java 3D Spieleprogrammierung



  • Spiele & Java schrieb:

    unfreiwillig Speicherlecks in den Code reingekommen wären.

    Was für eine naive, falsche Aussage. In modernem C++ kann es gar keine Speicherlecks geben, weil hier Smartpointer zum Einsatz kommen.



  • /rant/ schrieb:

    gastausdemnorden schrieb:

    C++ ist spätestens seit Android von Java in der Spieleentwicklung abgehängt worden, jedenfalls was die Quantität angeht.

    Für die Mehrheit der mobilen Games ist die Performance auch nicht kritisch. 3D Mahjong und Kartenspiele gab es schon unter Windows 3.11, programmiert ohne C in 16-Bit Visual Basic. Wenn für dich die Flut an solchen Games einen Fortschritt darstellt, der den Sieg von Java in der Entwicklung des Genres begründet, dann soll es halt so sein. Aber sogar Microsoft wird trotz einer technisch bei weitem überlegenen VM seine mobile Plattform bald für natives C++ öffnen, um für bessere high-performance Games und Portierungen zu sorgen.

    Du bist anscheinend noch nicht in de Zukunft angekommen. Es gibt soo viele Spiele mit 3D-Engine und OpenGL ES, die sehr wohl Performance brauchen. Kann es sein dass du dich seit ca. 10 Jahren nicht mehr weitergebildet hast, deine Antwort läßt dies stark vermuten?

    Mahjong und Kartenspeiele...lol. Der Ottonormaluser wird in 10Jahren fast ausschließloch nur noch Javaanwendungen nutzen, da so ein uralt DesktopPC fast nur noch für Leute in fragen kommen die sowas beruflich brauchen.



  • schauausdemfenster schrieb:

    Mahjong und Kartenspeiele...lol. Der Ottonormaluser wird in 10Jahren fast ausschließloch nur noch Javaanwendungen nutzen, da so ein uralt DesktopPC fast nur noch für Leute in fragen kommen die sowas beruflich brauchen.

    Da wär ich mal extrem vorsichtig.
    Free lunch is over 😉
    http://www.gotw.ca/publications/concurrency-ddj.htm



  • Fakt ist Java ist schnell genug für alle möglichen Arten von Software inklusive 3D-Games auf Smartphones/Tablets und das schon jetzt. Ich bezweifle, dass da nochmal ein großes C++ Boom unter den mobilen Geräten kommen wird. Immer mehr Leute werden für alltägliche Aufgabe keinen Standardmäßigen PC mehr einsetzten, wozu auch?

    C++ wird somit immer mehr in die Systemschiene und weg von den Anwendungen gedrängt, was ja auch vernünftig ist. Die Welt dreht sich nun einmal weiter, ob das einigen passt oder nicht.

    Ich denke schon das die Masse der Software(Apps) in Zukunft nicht in C++ geschrieben sein werden. Die Tablets sind überall, selbst schon mittlerweile im Kinderzimmer, wie ich auf der Spielemesse gesehen habe. Die Schule wird auch immer mehr Java-Anwendung mit Tablets nutzen.

    Ich würde gerne in ca. 5 Jahren noch mal hier reinschneien und schauen ob sich die Spiele/Softwareindustrie nicht doch erheblich mehr Java als C++ widmet.



  • meinekugelsagt schrieb:

    Ich würde gerne in ca. 5 Jahren noch mal hier reinschneien und schauen ob sich die Spiele/Softwareindustrie nicht doch erheblich mehr Java als C++ widmet.

    Wohl kaum. Aber nicht unbedingt weil man die Performance braucht, sondern weil Java einfach eine ziemlich hässliche Sprache ist. Kein Destruktoren, keine Operatorüberladungen, keine freien Funktionen, Klassen als Namespaces missbraucht, ohne Ende Code-Redundanz mit erzwungenem new und ohne ein C++ "auto", ..
    Dazu kommt dann noch der Müllsammler, der sich immer genau dann entscheidet mal nen ordentlichen Putz zu machen, wenn es so gar nicht passt.
    Aber Java ist toll. 🤡 👍



  • Lol, ich kenne wenig die in C++ für Android coden und ich glaube mit C++ als Kernsprache würde sich nicht so viele Entwickler in den neuen Appmarkt drängen, C++ ist die übelste und häßlichste Sprache die es im Moment gibt. Die Mehrheit wird über kurz oder lang auf Android umsteigen, weil sie nix anderes brauchen für ihre 0815-Anforderungen und hier gibt Java den Ton an. Der Trend ist doch ganz klar zu erkennen und ich glaube nicht das Windows in 10 Jahren noch DIE große Rolle spielen wird wie heute.

    Tablets kommen so langsam immer mehr in Krankenhäusern, Schulen, Privat, Behörden, Altersheimen, Kinderzimmer und und und. PCs wird es weiterhin geben aber bei weitem nicht mehr in dem Umfang wie heute, wozu auch???



  • androiden schrieb:

    Lol, ich kenne wenig die in C++ für Android coden

    Was daran liegen *könnte*, dass das NDK nur für "performance-critical portions of your apps" gemacht wurde, also warum sollte sich jemand den Sprachmischmasch antun wollen. Ich z.B. würde lieber C++ nutzen, aber so lohnt das einfach nicht.



  • Ich denke auch nicht das Android/iOS ewig die Gewinner im Mobilesektor bleiben werden. Ich kann mir gut vorstellen dass es auch hier mal was wirklich freies geben wird, oder auch Microsoft kommt mit Windows8 dort an.

    Warum sollte es nicht ein schickes Mobileframework für C++ geben, Ressourcen sparen und Sicherheit müssen sich doch nicht ausschließen?



  • Natürlich ist es möglich mit JAVA 3D Spiele zu entwickeln, die C++ Spielen in nichts nach stehen...

    Ich habe ein JAVA 3D MMORPG im Diablo Stil geschrieben: http://www.forgottenelements.com
    Verwendet dafür habe ich lediglich Plain Old JAVA (client und server), die JPCT 3D Engine (http://www.jpct.net) und einen Server mit Tomcat und Datenbank.
    Möglich ist alles! ... wenn man nur will...

    Hier ein aktueller Screenshot:
    http://www.forgottenelements.com/images/screenshots/pic1.jpg

    http://www.forgottenelements.com



  • Heute wird ziemlich viel mit Smartphones und erst recht Tablets gespielt. Die OpenGL API wächst mit den APUs und ich sehe keinen Grunde warum nicht jetzt schon mindestens so viele 3D-Spiele für Android in Java auf den Markt kommen wie für Windows in C++.

    Ich glaube fest daran das Windows immer unwichtiger im Hausgebrauch werden wird und es ganz normal sein wird in Java tollen 3D-Games zu entwickeln.

    Mit Windows8 hat sich Microsoft eh schon ins Bein geschossen und mal wieder eine komplette Technologie verpennt. Fahren sie weiter diese Schiene war es das auch für Microsoft nicht jedes Monopol hält ewig.



  • hihi, erst recht mit Windows8



  • Gregor schrieb:

    Naja, es ist natürlich so, dass die Spieleprogrammierung traditionell eher mit C++ und so gemacht wird. Insofern ist bezüglich C++ auch mehr relevante Infrastruktur zur Spieleprogrammierung vorhanden. Aber natürlich gibt es Ansätze, Spiele auch in Java zu programmieren. Vor allem kleine, unabhängige Entwicklerteams sind da bisher aktiv. Oft sind die Projekte dann auch nichtkommerziell. Beispiele:

    Tribal Trouble: http://tribaltrouble.com/

    Wurm Online: http://www.wurmonline.com/

    Diverse kleine Spiele, nicht alle 3D: http://www.puppygames.net/

    Jake 2 (Quake 2 in java): http://bytonic.de/html/jake2.html

    Die fallen mir gerade so ein, sind alle schon relativ alt, keine Ahnung, was es da so an neueren Spielen gibt. Ich habe das in letzter Zeit nicht so sehr verfolgt. Vielleicht kennt hier ja noch jemand weitere Spiele. Würde mich persönlich interessieren.

    EDIT: Auf der Seite von der JMonkeyEngine sind auch noch ne Menge Screenshots von Java-Spielen zu sehen:

    http://jmonkeyengine.com/index.php?option=com_content&task=view&id=68&Itemid=84

    praktisch alle neuen Spiele laufen auf Java, aber Lego.de benutzt auch oft Unity Web Player



  • Unreg1 schrieb:

    praktisch alle neuen Spiele laufen auf Java

    Das ist totaler quatsch! Auf Android werden die meisten Spiele in Java geschrieben, auf iOS mit Sicherheit nicht und auf normalen Computern gibt es sicher recht viele Spiele die jetzt mit Java programmiert werden aber auch hier mit Sicherheit kein großer Teil.

    Das größte Problem bei Java für die Spieleentwicklung ist der GC und nicht unbedingt die Performance. Naja gut letzteres für einige Spiele wahrscheinlich auch aber wenn man in Spielen Verzögerungen durch Speicherbereinigung hat, ist es schon kritisch zu sehen.


  • Mod

    Interessant, dass diese uralte Diskussion tatsaechlich manchmal wieder ausgegraben wird.

    SLx64 schrieb:

    Unreg1 schrieb:

    praktisch alle neuen Spiele laufen auf Java

    Das ist totaler quatsch! Auf Android werden die meisten Spiele in Java geschrieben, auf iOS mit Sicherheit nicht und auf normalen Computern gibt es sicher recht viele Spiele die jetzt mit Java programmiert werden aber auch hier mit Sicherheit kein großer Teil.

    Ich wuerde die Aussage so interpretieren, dass Unreg1 davon ausgeht, dass Handyspiele inzwischen die grosse Mehrheit der neuen Spiele darstellen. Ob das tatsaechlich so ist, kann ich nicht sagen, ich kann es mir aber durchaus vorstellen.

    SLx64 schrieb:

    Das größte Problem bei Java für die Spieleentwicklung ist der GC und nicht unbedingt die Performance. Naja gut letzteres für einige Spiele wahrscheinlich auch aber wenn man in Spielen Verzögerungen durch Speicherbereinigung hat, ist es schon kritisch zu sehen.

    Ich glaube, dass das nur ein theoretischer Einwand ohne viel Praxisrelevanz ist. Mir ist bei Javaspielen eigentlich noch nie bewusst aufgafallen, dass da andauernd Pausen sind, weil wohl der GC aktiv wird.

    Ich sehe allerdings auch, dass sich Java bei der Entwicklung grosser Spiele fuer den PC nicht wirklich etabliert hat. Das ist etwas, was man wohl einfach so zur Kenntnis nehmen muss.



  • Das grössere Problem von Java ist nicht der GC, sondern dass jeder Mist per Referenz gehandhabt werden muss by Design (aka 1995 so entschieden und nun für alle Ewigkeit gleich).

    Wenn du z.B. in Java einen Array von Vertices haben willst, dann ist das nicht möglich. Für den unerfahrenen Programmierer sieht es vielleicht so aus, aber in Wahrheit hast du einen Array von Referenzen auf Vertices, welche in der Regel durch den Speicher verteilt sind. Stell dir jetzt eine etwas komplexere Objektstruktur vor, etwa das dein Vertex mehrere Vektoren enthält. In anderen Sprachen kein Problem (schon QBasic konnte das), macht das in Java niemand so aus einem einfachen Grund.

    Jede Instanz einer Klasse muss separat angelegt und per Referenz angesprochen werden. Jeder Methodenaufruf verursacht diverse Speicherzugriffe und Dereferenzierungen, was einfach Performance kostet (oder musst das Design opfern und schiebst int[] umher als Opaques). Wenn du per Interop eine Speicherstruktur übergeben willst (gerade etwa bei OpenGL), muss diese jedesmal umkopiert und in einen flachen, zusammenhängenden Speicherbereich projiziert werden.

    Aber eigentlich ist auch das alles immernoch vernachlässigbar. Games werden meistens einfach mit der Sprache entwickelt, welche auf der jeweiligen Plattform am bequemsten ist. Auf Android ist es Java (egal ob du Java hasst oder nicht, mit dem NDK will man wenn möglich nichts zu tun haben), fast überall sonst ist es eine Abart von C.


Anmelden zum Antworten