C contre Java pour la programmation de jeux [fermé]


Fermé. Cette question est basée sur l'opinion . Il n'accepte pas actuellement de réponses.

Vous voulez améliorer cette question? Mettez à jour la question afin qu'elle puisse être répondu avec des faits et des citations par éditer ce post .

Fermé il y a 5 ans.

Améliorer cette question

Je comprends que C++ est généralement considéré comme meilleur que Java pour les jeux (au moins les jeux à plus grande échelle). Pourquoi est-ce?

Qu'est-ce qui empêche Java d'être compétitif dans ce domaine champ? Quelles raisons contre l'utilisation de Java pour la programmation de jeux ont le plus de base, et lesquelles sont des mythes?

EDIT: Je ne suis pas un peu familier avec C/C++, et je ne pensais pas faire la différence entre les deux à la ligne 1 >.

Author: Jonathan, 2009-10-14

18 answers

La raison pour laquelle Java (et C#/. NET) n'est pas une option viable pour les titres AAA à ce stade est les moteurs de jeu établis et leurs chaînes d'outils sont écrits en C++. Le développement de jeux consiste à obtenir un titre sur le marché dans les plus brefs délais, et les budgets ne permettent pas de se lancer dans des choses comme un nouveau langage/moteur lorsque plusieurs sont déjà disponibles, fonctionnent bien et disposent d'un ensemble complet d'éditeurs et d'outils les soutenant.

Passer à Java (ou C#) nécessiterait également un nouveau JVM (ou CLI) axée sur les performances à travers le big - 3 (PC, X360, PS3) ou big-5 (ajouter Wii, iPhone). C'est techniquement faisable, mais pas financièrement viable.

Edit: Toute personne ayant une connaissance de bas niveau des machines virtuelles et de l'état actuel des moteurs de jeu peut vous dire qu'une JVM ou une CLI pourrait incontestablement être implémentée avec un nouveau moteur de jeu pour battre les performances des moteurs C++ actuels. Le facteur de prévention est le temps et l'argent, rien de plus et rien de moins.

 40
Author: Sam Harwell, 2009-10-15 00:02:20

Haute performance et inertie du C et du C++ traditionnellement utilisés pour les jeux.

Choisir en fonction des performances n'est pas une priorité si vous ne faites pas une extravagance 3D.

 11
Author: xyz, 2009-10-14 23:31:34

Parce que:

  1. Java n'est pas compilé en code natif, ce qui signifie qu'il y a un impact sur les performances la première fois que le code est exécuté.
  2. Java ne vous donne pas de modèle de mémoire prévisible (les jeux de console en ont besoin)
  3. Java ne vous donne pas de finalisation d'objet déterministe.
  4. Java n'est pas aussi proche du matériel que C, un essentiel pour beaucoup de programmation de jeux 3D professionnels.
  5. Les programmeurs de console n'ont probablement pas de JVM qui s'exécute sur la PS3, X-Box, etc.
  6. Pénalités de performance d'exécution.
  7. Vous ne pourrez jamais extraire autant de performances d'une application Java qu'avec une application C++.

Il y a probablement plus de raisons, comme le fait qu'ils utilisent du code préexistant qui a été écrit en C ou C++.

EDIT: En aparté, je ne pense pas que de nombreux jeux modernes soient écrits en C. OOP se prête au développement de jeux, et C++ est le langage de fait de choix.

De plus, je ne l'ajouterai pas à mon liste, mais comme d'autres l'ont mentionné, il y a beaucoup de code préexistant qui fonctionne très bien et qui est utilisé dans l'industrie du jeu. Il ne serait pas pratique de réécrire tous/la plupart de vos outils juste pour passer à une nouvelle langue, surtout lorsque ce changement pourrait vous causer beaucoup de maux de tête.

 8
Author: Ed S., 2009-10-20 05:22:51

Je dirais, malgré les autres réponses pointant vers un manque de vitesse causé principalement par la JVM, que la vraie raison pour laquelle les gens ne codent pas les jeux en Java est le manque de support pour les environnements tels que DirectX et OpenGL (ce qui supprime en fait la nécessité pour votre code d'être proche du matériel Ce sont les frameworks de base que les gens utilisent généralement pour coder des jeux, en particulier de nos jours avec des jeux 3D partout - et le manque de support pour eux en est la raison pourquoi Java n'est pas considéré comme un langage pour le développement de jeux.

Pour souligner mon point, je vous suggère de jeter un oeil à Microsoft XNAqui est actuellement optimisé pour le codage en C# via le.NET framework (qui, comme Java, est compilé Juste à temps et ne fonctionne pas nativement en soi). Le framework XNA s'interface avec DirectX qui parle au matériel et c'est donc très rapide.

MODIFIER

Le commentaire de @ Ed Swangren m'a fait réaliser encore une autre distinction entre. NET vs Java lorsqu'il est considéré pour le développement de jeux. Je pense qu'un autre point fort de. NET est que si vous avez besoin de pouvoir extraire ce dernier bit de performance et faire des calculs de pointeur ou implémenter un algorithme sophistiqué de haute performance, c'est beaucoup plus facile grâce au mode unsafe. Bien sûr, vous pouvez même aller au-delà et écrire des bibliothèques natives à utiliser par votre code C# qui est rendu assez simple grâce à P/Invoke.

 6
Author: Mike Dinescu, 2009-10-15 00:22:51

Laissant C(++) de côté pour le moment... Je suis enclin à dire qu'une grande partie de la raison est que Java manque de quelque chose comme XNA. Quels avantages Java a-t-il réellement par rapport à un langage tel que C++ en matière de développement de jeux? Vous devez considérer que plusieurs de ses avantages typiques disparaissent pour le domaine spécifique du développement de jeux, tandis que C++ en gagne plusieurs.

XNA est ce qui a fait de C# un langage très populaire pour le développement de jeux amateurs, et contrairement à la croyance commune, un option tout à fait viable pour le développement commercial aussi. C#/. NET étant un parallèle à Java à bien des égards (et sans doute un meilleur framework de nos jours), lorsque les gens ont maintenant la possibilité de développer un jeu avec un langage de plus haut niveau, C # semble être le plus attrayant, à moins que le support multiplateforme ne soit essentiel (là encore, nous avons Mono et OpenGL pour. NET).

C (ou plutôt C++) a longtemps été le langage de développement de jeux en raison de leur nature de bas niveau (donc avantages en termes de performances) et l'hôte de frameworks graphiques (DirectX, OpenGL) et de moteurs qui les ciblent principalement. Son utilisation est intégrée dans le développement de jeux et a été utilisée virtuellement depuis la création de l'industrie - et ne disparaîtra pas de sitôt, je soupçonne.

 4
Author: Noldorin, 2009-10-14 23:43:31
  1. Java n'a pas de performances contrôlables
  2. Il est très réversible, donc plus difficile à protéger
  3. De nombreux jeux utilisent des langages de script comme lua ou python pour obtenir une programmation de niveau "supérieur"
  4. l'API de la plupart des systèmes est orientée C.
  5. Java peut être utilisé pour les systèmes de serveur back-end auxquels les jeux se connectent
  6. Jeux Flash semble de pris les jeux Java de niche auraient pu avoir.
 3
Author: Keith Nicholas, 2009-10-14 23:58:37

Java peut être optimisé pour être très rapide, comme en témoigne une interview que j'ai récemment eue avec une société de trading à haute fréquence, où ils utilisent Java, ainsi que C++.

Java a des liaisons OpenGL, comme d'autres l'ont souligné, donc accéder au matériel n'est pas un tel problème, esp puisque tous les jeux n'en ont pas besoin, certains jeux commerciaux ont été écrits pour Java3D.

Vous pouvez utiliser Scala ou F# si vous voulez plus de performances pour les opérations multithread ou numériquement intensives, et attachez-les simplement à l'interface graphique.

Mais, comme d'autres l'ont mentionné, les outils utilisés ont tendance à être écrits pour C++, et certaines entreprises se sentent plus à l'aise de faire des optimisations en assembly, mais, étant donné que les nouveaux processeurs sont très compliqués, avec les multicores, il est peu probable que vous obteniez une augmentation des performances par rapport aux optimisations des compilateurs, mais, tant que les entreprises estiment que ces optimisations sont encore nécessaires, elles resteront avec C++.

Si certains les développeurs voulaient écrire des outils de qualité commerciale pour Java ou.NET, il pourrait y avoir une opportunité de marché là-bas, mais il faudra beaucoup de travail pour le rendre aussi bon que ce qui existe déjà.

 3
Author: James Black, 2009-10-15 00:49:59

Je pense que C ou C++ est un meilleur langage pour construire de nombreux types de jeux car il est plus proche du matériel et susceptible d'être le premier langage implémenté sur tout nouveau matériel. Non seulement les bibliothèques permettant d'accéder à de nombreuses fonctionnalités avancées du matériel d'aujourd'hui sont susceptibles d'être implémentées en C.

Votre langage de niveau supérieur généralement général n'a pas de moyen facile d'accéder aux fonctionnalités du matériel à moins qu'il n'utilise un type de couche de liaison pour appeler les bibliothèques qui sont écrits en C.

Par exemple, comment écrire du code pour accéder à un GPU, ou écrire un Shader personnalisé, ou écrire du code qui fonctionne bien sur une puce Cellulaire, ou s'exécuter sur un Iphone, ou sur un Blackberry dans un langage de haut niveau. Même lorsque ces choses sont prises en charge, elles sortent bien après que d'autres personnes soient capables d'écrire des jeux en C qui utilisent ces fonctionnalités dans les jeux.

Un compromis que vous pouvez faire est d'utiliser un langage de niveau supérieur comme Java pour la plupart des choses et C où c'est nécessaire. Vous permettra de limiter l' types de plates-formes que vous soutenez cependant.

Java peut également être bon pour les jeux client/serveur où le serveur est écrit en Java.

 2
Author: BeWarned, 2009-10-15 00:19:55

Il est très difficile d'écrire un programme qui s'exécute en mémoire constante sans récupération de place en Java.

 1
Author: Crashworks, 2009-10-20 01:53:42

Si vous souhaitez lire les déclarations des studios de jeux qui sont heureux d'utiliser java pour le développement de jeux sérieux, recherchez sur Twitter #javaforgames https://twitter.com/search?q=javaforgames

En étudiant les tweets des développeurs Java, vous concluez que Java est bon pour le développement de jeux si vous l'utilisez en combinaison avec une API de moteur de jeu de haut niveau telle que libgdx et jmonkeyengine qui facilitent les efforts de développement et permettent au jeu de tirer parti de l'OpenGL / ES accélération matérielle fournie par le matériel GPU moderne.

Java permet des objectifs multiplateformes en utilisant lesdits moteurs sur mobile, console et bureau.

Certains développeurs de jeux préfèrent java pour la phase de conception du jeu pour concevoir des outils en interne.

Les studios de jeux Java et les développeurs qui recherchent les meilleures performances peuvent l'archiver en contrôlant étroitement OpenGL en utilisant directement JOGL ou LWJGL. Aussi la performance et la flexibilité archivent cela en écrivant leur propre moteur, si le temps et l'argent permet.

 1
Author: xranby, 2013-03-11 21:50:29

Je ne dirais pas qu'il est toujours vrai que C est meilleur que Java pour la programmation de jeux.

Par exemple, si vous voulez écrire un client de jeu qui peut être hébergé dans une page web, Java pourrait être mieux.

Lors de l'écriture de jeux qui produisent des graphismes 3D étonnants (par exemple, Halo sur la X-box), la vitesse de calcul est généralement à peine suffisante pour générer tous les pixels pour chaque image. Dans ce genre de jeu, C serait préférable à Java car il permet au programmeur d'écrire plus rapidement programmes at à un coût élevé en termes de difficulté à extraire cette vitesse.

 0
Author: Heath Hunnicutt, 2009-10-14 23:33:36

Je pense que c'est principalement parce que c permet aux développeurs d'extraire chaque petit peu de performance du matériel, alors que Java ne le fait pas, ce n'est pas assez bas niveau pour des choses comme les moteurs de rendu vidéo 3d haut de gamme. Fondamentalement, c vous permet d'extraire quelques images de plus par seconde dans votre jeu de tir next gen.

 0
Author: Kris, 2009-10-14 23:34:51

Inertie principalement... Bien que ce soit un peu vieux maintenant, vous pouvez regarder Jake2 (qui est un port Java pur de Quake 2 avec jogl comme lib OpenGL).

Il peut effectuer jusqu'à 85% aussi vite que l'original C++, ce qui signifie que c'est bien pour la plupart des jeux; en particulier ceux modernes qui sont plus sociaux et basés sur le jeu plutôt que les jeux limités "noyau dur".

Je suggère également que la plupart des réponses que vous obtenez ici proviennent d'un geek de jeu/ " Je veux le matériel le plus cool et jeu". Pour [ces] jeux 3D et les joueurs, ce 15% final est extrêmement important, car c'est ce qui sépare la carte graphique à 150 $de celle à 500 just qu'ils viennent d'acheter.

Comme John Carmack aurait dit (quelque chose dans le sens de): "Si je devais entrer dans la programmation de jeux maintenant, je programmerais pour l'iPhone". par exemple, ce n'est pas aussi amusant de faire le jeu le plus rapide avec le meilleur moteur 3d que de faire le meilleur jeu.

 0
Author: Stephen, 2009-10-15 00:28:33

Le marché des jeux sur console est environ 10 fois plus important (financièrement) que le marché des jeux PC. Pour les consoles de génération actuelle, toute la programmation majeure est en C ou C++ avec quelques petits morceaux d'intrinsèques ou d'assembleur. Si vous voulez être un programmeur de jeu professionnel et travailler dans une grande entreprise de jeux, alors apprenez C et C++.

Plus au point, tous les moteurs commerciaux multiplateformes qui sont les points de départ de nombreux jeux commerciaux sont en C ou C++ en ce moment comme Bien.

Vous pourrez peut-être travailler sur de petits jeux en java et flash ou même des jeux Windows occasionnels en C#. Vous pouvez même coder C # pour les jeux XNA, mais si vous voulez faire RÉEL (pressé sur DVD) jeux XBOX 360, vous devez apprendre C++.

Parlant en tant que développeur de jeux chez WBGames Chicago. Nous n'embaucherions pas un programmeur qui n'avait pas de solides compétences en C++. La même chose est vraie dans tous les autres studios de jeux que je connais.

 0
Author: Adisak, 2009-10-15 01:30:23

La réponse courte est parce que presque aucune plate-forme de jeu ne prend en charge Java, ou si elles le font, il existe une bien meilleure alternative.

Sur les consoles de jeux, les développeurs de jeux chevronnés utilisent C parce que c'est ce qu'ils font depuis 20 ans. Il n'y a aucune raison impérieuse pour que les jeux Java existent là-bas.

Sur le bureau, il y a quelques jeux Java, mais ils ne peuvent pas rivaliser avec les leaders du marché tels que World of Warcraft.

Sur le web, les Applets sont morts depuis longtemps, et si vous allez faire un jeu occasionnel, il va être en Flash.

Dans l'espace mobile, JME a eu son temps au soleil mais il est en voie d'obsolescence face à des plates-formes bien supérieures telles que l'iPhone.

Le scénario idéal pour que Java soit un gros cogneur dans le monde du jeu serait que Sun/Oracle fournisse une plate - forme de jeu comme la Wii ou l'iPhone-un appareil indispensable que tout le monde possède. Ensuite, il y a une bonne raison pour les développeurs d'investir du temps dans expérimenter de nouvelles technologies. Mais étant donné le manque apparent d'intérêt de Sun et Oracle pour le marché grand public, les chances qu'ils fabriquent une plate-forme de jeu sont minces.

 0
Author: bpapa, 2009-10-15 04:12:53

Ce n'est pas un problème technique mais purement un problème "d'optique client" pour cela.

Un bon code Java peut fonctionner aussi vite qu'un bon code C++. Il peut accéder à OpenGL aussi rapidement que le C++ natif via des projets comme LWJGL et JMonkeyEngine.

La vraie raison est que Sun n'a jamais fait aucun effort pour mettre en évidence Java pour les jeux et qu'ils n'ont jamais rendu le déploiement particulièrement facile pour les jeux Java. C'est BEAUCOUP de travail et d'efforts de la part du développeur / de l'équipe pour créer une installation transparente / fluide (et le lancement?) expérience pour le joueur.

Les clients ne font tout simplement pas "confiance" aux jeux Java et à la caution pendant le processus d'installation lorsqu'ils voient le logo.

 0
Author: eyuzwa, 2009-10-27 15:58:29

Bien que vieux, personne ici ne semble le souligner

Tous les jeux et applications sur Android sont programmés en Java

Car non seulement Android est écrit en Java, mais la plupart de ses applications/jeux/etc...

 0
Author: Adam, 2011-09-18 03:32:15

Je vais répondre d'une manière très différente.

Si Java peut nevre écrire un pilote de périphérique comme C, comment pouvez-vous imaginer qu'il serait plus rapide que le langage dans lequel le pilote est déjà écrit ?

 0
Author: Ahmed Saleh, 2013-11-20 11:59:11