web-dev-qa-db-fra.com

Pourquoi Java n'est-il pas plus largement utilisé pour le développement de jeux?

Je ne suis pas développeur de jeux ou quoi que ce soit, mais je sais que Java n'est pas très utilisé pour le développement de jeux. Java devrait être assez rapide pour la plupart des jeux) , alors où est le piège? Je peux penser à quelques raisons:

  • Manque de développeurs de jeux avec expertise en Java
  • Manque de bons cadres de développement de jeux
  • Les programmeurs ne veulent pas accepter Java comme langage de programmation de jeux. La plupart n'acceptent que C++ comme ça?
  • Pas de support pour les consoles de jeux (bien que le marché des PC existe toujours)

Cela pourrait bien sûr être autre chose. Quelqu'un qui connaît mieux que moi l'entreprise peut-il expliquer pourquoi Java ne prend pas de l'ampleur en ce qui concerne le développement de jeux?

81
Anto

Plusieurs raisons:

  • Autrefois, vous aviez besoin d'un "accès direct" pour les performances et l'interface utilisateur. Cela précède VM langages comme Java et C #.
  • La plupart des consoles (par exemple, 360, PS3) n'ont pas de machine virtuelle Java, vous ne pouvez donc pas réutiliser le code de la version PC. Il est beaucoup plus facile de compiler du code C++ pour prendre en charge divers périphériques.
  • La plupart des moteurs de jeux traditionnels (par exemple, Unreal) ont des liaisons C++. Il existe des connecteurs Java (par exemple, pour OpenGL) mais rien de semblable).
  • Pour les jeux sur PC, DirectX n'a ​​pas vraiment de solide Java support (le cas échéant).
  • Les jeux basés sur le Web s'exécutent en JavaScript ou Flash. Vous pouvez les écrire en Java en utilisant des choses comme GWT.
  • L'iPhone exécute une variante Objective-C.

Java est principalement utilisé dans les jeux Android ces jours-ci, tout simplement parce que c'est la langue principale de cette plate-forme.

95
Uri

Raisons techniques:

  • La plupart des meilleurs moteurs de jeux 3D sont écrits en C/C++. C'est un gros problème, car la plupart des développeurs de jeux ne veulent pas faire de compromis sur leur moteur 3D, mais ils ne veulent pas non plus en écrire un à partir de zéro. Java has jMonkeyEngine qui est open source et en fait vraiment bon mais il ne peut toujours pas rivaliser avec le nreal Engine .
  • Pour certaines situations très rares, il y a des avantages à obtenir "près du métal" en langage C ou d'assemblage, en particulier pour l'accès à des fonctionnalités matérielles spéciales. Ce n'est pas si important de nos jours, mais les développeurs de jeux professionnels aiment toujours avoir la possibilité .....
  • Java a un ordures collectées , runtime géré. 99% du temps, c'est un énorme avantage, cela rend certainement le codage plus facile et moins sujet aux erreurs et est l'une des principales raisons pour lesquelles Java est si populaire. Cependant, il provoque une latence occasionnelle problème pour les jeux car les cycles de récupération de place peut provoquer des pauses notables. Cela devient de moins en moins un problème avec les nouvelles machines virtuelles Java à faible latence, mais c'est toujours un problème pour les jeux graphiquement intensifs où le maintien d'un FPS élevé est essentiel.

Raisons non techniques:

  • Les maisons de développement de jeux professionnels sont fortement investies dans les compétences et les technologies C/C++. Cela crée une énorme quantité d'inertie .
  • La perception largement irrationnelle que Java est lente. Peut-être vrai dans les années 90, certainement pas vrai maintenant - vous pouvez certainement écrire un jeu 3D commercial rentable avec Java ( Runescape n'importe qui? Ou que diriez-vous Minecraft ?))
  • Une assez perception juste que Java est plus axée sur les applications commerciales et le Web plutôt que sur les jeux. Cela pourrait changer avec la croissance de Mobile et la nécessité d'un développement plus multiplateforme, mais cela est certainement vrai à l'heure actuelle.

Fait intéressant, il existe également de bonnes raisons pour lesquelles les développeurs de jeux devraient envisager Java:

  • Portabilité - à mesure que le nombre de plates-formes cibles prolifère, Java devient de plus en plus attrayant avec sa capacité quasiment inégalée à créer de véritables binaires multiplateformes
  • Écosystème de bibliothèques - à l'exception très importante des moteurs de jeux 3D, Java possède la meilleure gamme de bibliothèques de tous les Mise en réseau, son, IA, traitement d'image, magasins de données clés/valeurs, vous nommez le sujet et il y a probablement une bibliothèque open-source Java pour cela.
  • Développement côté serveur - Java est une excellente jauge/plate-forme pour le serveur, et comme de plus en plus de jeux intègrent massivement les éléments du joueur du côté serveur deviendront de plus en plus importants. Java sous Linux semble assez convaincant ici comme plate-forme.
  • La JVM - est probablement l'environnement d'exécution le mieux conçu VM dans le monde, avec une fantastique collecte des ordures, un compilateur JIT, prise en charge de la concurrence, etc. Cela ne fera que s'améliorer, et à mesure que les développeurs de jeux commenceront à utiliser de plus en plus de langages dynamiques dans leurs jeux, ils voudront le meilleur environnement d'exécution possible.
  • Autres langages JVM - Java est un solide od bourreau de travail, mais le vrai l'innovation est en cours avec les nouveaux langages JVM (Scala, Clojure notamment). Ces langages bénéficient de tous les avantages de la plateforme Java/JVM, plus ce sont des langages modernes extrêmement puissants.
81
mikera

D'accord, il y a beaucoup de désinformation dans ce fil.

Je connais l'industrie du jeu extrêmement bien, j'y suis depuis 25 ans. Je sais aussi Java dans les jeux extrêmement bien avoir été Sun Java Game évangéliste technique et conférencier Java expert en programmation de performance).

En termes de vitesse de calcul, Java bat C++ dans de nombreux benchmarks de calcul scientifique aujourd'hui. Vous pouvez écrire du code pathologique dans l'un ou l'autre langage qui fonctionne mal si vous le souhaitez, mais dans l'ensemble, ils sont au pair et ce depuis longtemps.

En termes d'utilisation de la mémoire, Java a des frais généraux. HelloWorld est un programme 4K en Java. Mais ces frais généraux sont assez insignifiants dans les systèmes multi-Go d'aujourd'hui. Enfin, Java a plus de temps de démarrage. Je ne recommanderais pas d'utiliser Java pour les utilitaires de courte durée comme les commandes de ligne de commande Unix. Dans ces cas, le démarrage dominera vos performances. Dans un jeu cependant, son assez insignifiant.

Correctement écrit Java ne subit pas de pauses GC. Tout comme le code C/C++, il nécessite une gestion active de la mémoire mais pas au niveau C/C++. Tant que vous gardez votre l'utilisation de la mémoire pour des objets à longue durée de vie (persistants pour un niveau ou un jeu entier) et des objets à très courte durée de vie (vecteurs et autres, transmis et rapidement détruits après le calcul) gc ne devrait pas être un problème visible.

En termes d'accès direct à la mémoire, Java l'a depuis longtemps; depuis Java 1.4 sous la forme de tampons natifs d'octets directs. Bit twiddling in = Java peut être légèrement ennuyeux en raison du manque de types entiers non signés, mais les cycles de travail sont tous bien connus et pas terriblement onéreux.

Bien que son vrai Java n'a jamais eu de liaison Direct3D, c'est parce que Java recherchent la portabilité. Il a DEUX liaisons OpenGL (JOGL et LWJGL) et une liaison OpenAL (JOAL) et une liaison d'entrée portable (JInput) qui se lie sous le capot à DirectInput sur Windows, HID Manager sur OSX et une liaison Linux (j'oublie laquelle).

Il est vrai qu'aucun moteur de jeu complet n'a présenté Java la manière, disons Unity, a présenté C # et c'est une faiblesse dans l'espace indépendant. D'un autre côté, il y avait deux bons APIS de niveau Scenegraph qui étaient totalement portables sur Windows, OSX et Linux. Tous deux écrits par Josh Slack, le premier s'appelait moteur JMonkey et le second Ardor3D.

L'affiche du haut est correcte: les deux choses les plus importantes qui tenaient Java dans le développement du jeu étaient les préjugés et la portabilité. Ce dernier était le plus gros problème. Bien que vous puissiez écrire un Java jeu et expédiez-le sur Windows, OSX et Linux, il n'y a jamais eu de console virtuelle. Cela était dû à une totale incompétence dans la gestion intermédiaire de Sun. Nous étions peu nombreux à travailler sur Java dans les jeux en fait eu des accords avec Sony pas moins de 3 fois pour obtenir un VM sur une PlayStation et tous les 3 fois la direction intermédiaire de Sun l'a tué.

Alors que Sun a flirté avec les technologies clientes, le fait est que la direction de Sun n'a jamais obtenu de produits de consommation. C'est pourquoi Java en tant que langage client de Sun n'a jamais réussi sous aucune forme, et pourquoi il a fallu Google et Dalvik (le Android VM de type Java) pour faire Java un succès de plateforme partout.

Et c'est pourquoi je code des jeux en C # aujourd'hui. Parce que Mono est allé là où la direction de Sun a refusé.

29
user430788

Java est idéal pour la logique métier, les serveurs et le code indépendant de la plate-forme qui doit fonctionner de manière fiable. Plusieurs facteurs expliquent pourquoi Java n'est pas souvent utilisé dans les jeux:

  • vérification des limites et autres mécanismes de sécurité (différence de performance marginale de nos jours)
  • avoir à convertir entre des structures de données C++ et Java structures de données (ne peut pas simplement copier la mémoire entre les tampons)
  • de nombreux livres et tutoriels suivent la foule, il est donc difficile de trouver des informations sur les développeurs de jeux non C++
  • les bibliothèques graphiques de base (DirectX et OpenGL) et de nombreux moteurs standard sont basés sur C/C++
  • de nombreux jeux essaient de fonctionner aussi vite que possible pour ajouter des fonctionnalités visuellement plus attrayantes

Il n'est pas facile de travailler avec des bibliothèques C++ à partir de langages de bytecode comme Java (écriture d'une couche JNI) et .net (beaucoup d'attributs marshalling/unmarshalling, api/structure). peu de travail pour peu d'avantages.

Remarque: certains serveurs de jeux utilisent Java.

Article similaire ici : https://stackoverflow.com/questions/1034458/why-arent-video-games-written-in- Java

9
Graeme Wicksted

Java n'est pas assez rapide pour la plupart des développements de jeux. C'est beaucoup plus lent que d'utiliser C++/Assembly, qui est la norme. C'est la même raison pour laquelle le développement de jeux ne se fait pas en utilisant C # ou VB. Les développeurs de jeux ont besoin et planifient chaque dernier cycle d'horloge sur lequel ils peuvent mettre la main pour des choses comme les calculs physiques, la logique de l'IA et les interactions avec l'environnement.

Pour les jeux plus simples, Java pourrait être utilisé assez efficacement. Si vous voulez créer un clone Tetris ou Bejeweled, ou quelque chose d'autre de ce niveau de détail, alors Java fonctionnerait bien. Mais Java ne peut pas créer de jeux comme Halo, Medal of Honor, Command & Conquer, etc. et le rendre jouable. Du moins tel qu'il existe de nos jours.

Et les raisons que vous indiquez dans votre question sont également valables. Sauf, je pense, pour le manque de développeurs de jeux avec Java expertise. De nombreux jeux sur téléphones et autres appareils portables sont écrits en Java (y compris la plupart des jeux Android), et certains jeux sont assez excellents. Je pense donc qu'il existe une base décente et croissante de développeurs de jeux possédant Java connaissances.

L'idée change sur la possibilité d'utiliser ces langages de niveau supérieur pour certains des jeux les plus avancés. Par exemple, l'un de mes jeux préférés, Train Simulator d'Auran, est écrit avec de grandes portions en C #, et cela fonctionne assez bien. La base grandit donc et continuera d'évoluer.

5
BBlake

Les jeux modernes sont tout au sujet des graphiques 3D se produisant dans du matériel à usage spécial.

Même en 2002, Jacob Marner a trouvé dans son rapport "Evaluating Java for Game Development") que Java était tout à fait utilisable pour les jeux, sauf pour les plus dépendants des performances et en raison de la robustesse du langage et de la JVM sous-jacente, il était moins coûteux de le faire de cette façon.

http://Java.coe.psu.ac.th/FreeOnline/Evaluating%20Java%20for%20Game%20Development.pdf

Je pense personnellement qu'avec les progrès qui se sont produits depuis, en particulier dans les graphiques 3D, et avec les excellentes liaisons avec OpenGL et al, cet inconvénient est beaucoup moins prononcé de nos jours.

Le problème doit donc être ailleurs. Une raison probable est la taille du runtime Java (qui est beaucoup moins un problème de nos jours avec les jeux multi-DVD), et une autre l'inertie du code existant. Il est notoirement fragile de commencer à travailler avec du code natif en Java. Une troisième raison est familière aux développeurs vedettes des jeux. Une quatrième est de savoir si Java est disponible sur la plateforme).

Une chose est sûre cependant: la plupart des jeux deviennent scriptables au lieu de tout graver en code C dès le début, et vous voulez le meilleur runtime sous votre langage de script. De nos jours, cela signifie essentiellement le CLR ou la JVM.

5
user1249

Les développeurs de jeux aiment être proches du métal et écrivent souvent leurs boucles internes serrées dans Assembly. Java n'offre pas le même niveau de performances possibles, à la fois en termes de vitesse cohérente ou d'utilisation de la mémoire (l'exécution d'un JIT prend son péage).

4
dan_waterworth

Je pense que le facteur limitant pour la plupart des gens est la (manque de) disponibilité de bons moteurs de jeu. Pour aller très loin, nous devons chercher pourquoi ceux-ci ne sont pas disponibles.

Je regarderais cela de l'autre côté pendant un moment. Développer un moteur de jeu (par exemple) est un lot de travail. Qui gagnerait suffisamment à en développer un pour investir le temps et les efforts nécessaires?

La plupart des candidats évidents pour le développement de type framework dans/pour Java (par exemple, IBM, Oracle) semblent n'avoir aucun intérêt pour les jeux. Les candidats évidents pour le développement de jeux (par exemple, Id, EA ) semblent avoir presque aussi peu d'intérêt pour Java.

Presque le seulement candidat auquel je peux penser qui semble tout à fait raisonnable serait Google. Le langage de développement principal pour Android est Java, et encourager le développement de jeux pour Android pourrait fournir un réel avantage pour la plate-forme).

Pour autant que je sache, ils ne l'ont pas encore fait (encore?), Ce qui laisse des limites assez sévères à presque n'importe qui d'autre. Sans peu de moteurs de jeu modernes et performants pour utiliser le développement sur Java signifie beaucoup de travail supplémentaire, avec (ce qui me semble) peu de chances de produire beaucoup de bénéficier en échange de ce travail supplémentaire.

4
Jerry Coffin

La question est à la hauteur de demander quelque chose dans les lignes de:

Quoi de mieux pour propulser votre voiture, un moteur de bateau ou un turboréacteur.

Cela se résume à l'évolutivité, à l'évitement des bogues, à la vitesse, à la signature de la mémoire, à la modularité et à tout un tas de choses. La question ne devrait pas être de savoir ce qui est mieux en tant que norme de l'industrie, la question devrait être "ce qui est mieux pour moi" comme dans ce que vous savez ou dans quelle mesure vous le savez. S'il fait le travail, il fait le travail, si vous pouvez réellement vendre l'idée, alors cela fonctionne et qui sait que vous pourriez même plier quelques cuillères.

1
Meh

Java n'a pas été conçu pour le développement de jeux, Java a été conçu pour être un langage "pour le Web".

En ce qui concerne le développement de jeux, Sun n'a pas vraiment pris en charge Java comme langage de développement de jeux comme Microsoft # C #.

Je pense que le manque de cadres de développement de jeux convaincants est ce qui a vraiment tué Java dans cet aspect.

0
Mahmoud Hossam