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:
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?
Plusieurs raisons:
Java est principalement utilisé dans les jeux Android ces jours-ci, tout simplement parce que c'est la langue principale de cette plate-forme.
Raisons techniques:
Raisons non techniques:
Fait intéressant, il existe également de bonnes raisons pour lesquelles les développeurs de jeux devraient envisager Java:
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é.
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:
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
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.
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.
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).
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.
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.
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.