Java 3D Spieleprogrammierung
-
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
-
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.
-
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.