Jeu Java Moteurs
J'ai été à la recherche dans le développement d'un jeu récemment et mon premier langage de programmation Java. Après avoir joué beaucoup de superbes jeux développés en c++, je me suis demandé pourquoi Java n'est pas très utilisé dans l'industrie des jeux. J'ai regardé jMonkeyEngine 3 et de quelques autres du moteur de jeu environnements, mais les captures d'écran que j'ai vu sont beaucoup moins impressionnante. Des titres comme need for Speed Hot pursuit forme d'EE et d'Assassins Creed d'ubisoft transmettre un tel réalisme.
Pourquoi ne peut-Java produire de tels industrie de la force des jeux ?
Est-ce l'œuvre d'art?
Java et C# dispose d'un système automatique de collecte des ordures et le c++ n'est pas. Le programmeur doit payer plus d'attention à l'utilisation de la mémoire à avoud balançant des pointeurs et ainsi de suite.
Merci les gars.
- Essayez de regarder LWJGL, son un grand Java bibliothèque graphique. Il EST assez récent, mais, si ma mémoire est bonne.
Vous devez vous connecter pour publier un commentaire.
Vous avez vous-même répondu à votre question.
Dans les jeux de programmation de la collecte des ordures n'est pas un avantage. Même si les performances de Java est plus ou moins à égalité avec C++ pour la plupart des tâches, et le JIT peut même faire très agressif optimisations qui frappent ceux qui peuvent être faites lors de l'analyse statique; la collecte des ordures peut faire le framerate chute au pire moment.
Aussi, pour les images les tâches gourmandes en Java n'est pas très approprié, car il y a beaucoup de choses qui sont considérés comme dangereux par le moteur d'exécution, et sont donc interdits (comme le casting des pointeurs de réinterpréter les données).
Une autre question importante est déjà réglé un savoir-faire dans l'industrie. L'inertie de C++ dans l'industrie des jeux est énorme. Tous les développeurs de jeux savent aujourd'hui que le C et le C++. Avoir un grand développeur de la piscine à la location à partir diminue celui de la gestion des risques qui est la clé de gens qui quittent la société.
Mais malgré cela, il y a eu quelques jeux à succès avec certaines parties écrites en Java, comme Vampire: La Mascarade - Rachat.
Plus récent jeu comme Minecraft est entièrement écrite en Java; mais il ne fait pas état de l'art graphique, l'accent est mis de plus en plus dans la nature dynamique de l'environnement virtuel.
Et beaucoup d'autres jeux et les moteurs ont un runtime qui prend en charge un gérés (en sécurité automatique de l'allocation de la mémoire et de la collection) langage de script construit au sommet d'une haute performance de rendu et de plate-forme de réseautage (écrit en C/C++), comme L'Unreal Engine par exemple.
Généralement tout ce qui est dit ici a une raison de ne pas le port de Java pour le développement d'un jeu; était. L'industrie du jeu est actuellement frapper un changement de paradigme. Trois choses ont changé ou sont en train de changer l'industrie du jeu:
D'un jeu ne dépend pas entièrement de lui-même plus. Les principaux avantages qui existaient dans l'ancien (faible niveau de langues) sont le ralentissement d'être pesés par les avantages qui existent dans des langages tels que C# et Java (niveau élevé de langues). Deux grossières, mais indéniable exemples sont des jeux qui fonctionnent sur Facebook, et à distance de médias, tels que les téléphones, les tablettes, etc.
Il est important de préciser que dans les deux scénarios, tous les trois besoins énumérés ci-dessus sont dissous. Un jeu qui ne peut fonctionner sans un serveur n'a pas besoin de s'inquiéter d'être exemplaire contrefait (hébergement privé par ingénierie inverse non inclus). La demande de réseau dépendant de jeux nécessite un langage qui peut équilibrer les performances du système avec les performances du réseau (généralement un impasse entre Java et C/C++, favorisant C/C++ strictement en raison de l'abondance des pré-existantes des bibliothèques). Cependant, un jeu conçu des modules-programme de mise en réseau module serait difficile à développer dans les bas niveaux de langages tels que C/C++. Une société qui seraient intéressés par la conception d'un jeu en C/C++ pour une Modulaire-programme de mise en réseau de modèle pour créer un ordinateur virtuel entièrement dédié à un jeu, ou reprogrammer/recompiler le jeu un certain nombre de fois trop fou pour penser. OMI, alors qu'il peut être trop tôt pour indiquer la langue dans laquelle la préférence, je vais mettre mes paris sur Java pour trois principales raisons.
1) de La JVM permet des applications Java pour exécuter pratiquement sur n'importe quel
plate-forme, que ce soit Apple, Android, Windows 8 ou Linux/UNIX dérivé
(pratiquement de soutien sur toute plate-forme matérielle ainsi).
2) Java utilise OpenJL (OpenGL dérivés, qui se déroulera sur OpenGL
en tant que client - jMonkey est un moteur conçu dans OpenJL). Il est
important de noter que seul Microsoft Windows utilise DirectX, comme de bons
comme il peut être, il y a une seule tirer en arrière. Pratiquement tous les OS qui peut exécuter des jeux sera
capable de rendu OpenGL et la conception modulaire est de pousser sur ce
comme jamais auparavant. (Veuillez noter que Microsoft tente de s'écarter de cette question par le fait de monopoliser sur la distribution de Windows 8).
3) Java prend en charge le filetage à l'intérieur de la JVM, ce qui lui permet
pour tirer pleinement parti des processeurs multi-core, sans l'utilisation de
un tiers de la bibliothèque. Actuellement, c'est un handicap pour tous les autres
langues (en particulier ceux développés pour les téléphones).
Alors que la JVM n'est pas sans poser de latence de préoccupation, il convient de noter que ces préoccupations pourraient être radié par le filetage. J'ai aussi ne pas être trop inquiet au sujet de Windows 8 et de la poussée de Microsoft. Google dispose d'un stock de partager de $720/action, Apple ayant $526/action, Microsoft étant de 27 $à ce jour. Alors que Apple est susceptible d'être effectuée par Microsoft de pousser due principalement à l'aide de C#, de Google, d'autre part est susceptible d'en tirer profit. Microsoft n'a jamais eu beaucoup de chance lors de la compétition à l'encontre de Google et de Google/Android lourdement utilise Java. Angry Birds a été initialement conçu en Java pour info, et porté à C# pour l'iPhone. Si Google/Android applique la normalisation, Microsoft va tomber comme une mouche, en prenant Apple avec eux.
La réponse à votre question est d'illustrations et de ressources financières. Et à l'origine Minecreft a été développé par une seule personne en java. Alors que tittles comme CA ou NFS sont développés à partir des équipes de milliers de personnes. Comparer les ressources. En outre Ubisoft utilise custrom moteur de jeu. Si vous êtes seul développeur, vous devriez vous concentrer sur l'idée en raison du manque de ressources. Et si vous avez une idée de la garbege collecteur est unoticable normal seul développeur de jeux. Et comme un seul développeur, vous devez choisir le plus rapide développement de la technologie.
Je voulais juste soulever un côté sujet de cette question, mais la collecte des ordures n'est pas nécessaire utile pour la création de bas-niveau, la performance des aspects essentiels de l'AAA-type de moteur de jeu. En fait, en évitant ce genre de référencement et de système de collecte des objets utiles. Vous voulez même de types définis par l'utilisateur pour être contigus en mémoire et fit adjacentes d'objets dans le cache, etc.
À part les problèmes de performances de la collecte des ordures à des intervalles périodiques et de la dispersion des objets dans la mémoire, les jeux ne peuvent pas se permettre d'être qui fuit avec leurs volumineux de ressources, et le garbage collector entrave choses là. Oui, j'ai juste dit que GC entrave la capacité à éviter les fuites de.
La collecte des ordures n'est pas une panacée contre les fuites de ressource.
En tant que contre-intuitif que cela puisse paraître, regardez la leakiest apps là-bas aujourd'hui: ceux où le plus vous les utilisez, plus et plus l'utilisation de la mémoire continue d'augmenter. Généralement ils ne sont pas des applications C ou C++. Applications C/C++ peuvent être connus pour s'écraser, mais pas tellement pour les fuites. Ceux qui fuient sont beaucoup plus souvent programmé dans les langues avec la collecte des ordures.
Par exemple, prendre des jeux Flash. Il ya beaucoup de là-bas, et pas seulement de l'amateur complet logiciel, qui utilise de plus en plus de ressources et d'obtenir de plus en plus lent, le plus vous jouez le jeu, vous obligeant parfois le redémarrage de votre navigateur pour obtenir le jeu rapide à nouveau. Pourtant, ils sont codés dans ActionScript, une langue qui a de collecte des ordures.
Dans la théorie de la collecte des ordures devrait réduire les fuites. Dans la pratique, il élimine souvent les moins cher et plus facile à fixer-et-spot physique des fuites (oups j'ai oublié de supprimer cette chaîne de caractères) en échange de la plus coûteuses et difficiles à isoler logique de fuites (oups, la logique du système provoque des encombrants de ressources pour subsister jusqu'à ce que l'ensemble du jeu est à l'arrêt).
C'est parce que dans un GC de la langue, si vous voulez créer la propriété partagée d'une nouvelle ressource,
R
, tout ce que vous avez à faire est de stocker une poignée de référence à un autre objet,A
.B
etC
peut également stocker une poignée deR
, et maintenantR
a trois propriétaires et ne sera libéré si tous les trois propriétaires de libération de la référence. L'utilisateur ne voit et travaille avec ceA
les magasins, de sorte que la logique du jeu consiste à enleverR
deA
périodiquement, mais les références à s'attarder autour deB
etC
silencieusement le code oublié de libération. En C/C++, le balançant pointeur ici dansB
etC
peut effectivement être préférable, car elle conduirait à une immédiatement détectable et à corriger problème lors des tests du jeu, où le développeur de l'exécution d'un débogueur sera très rapidement d'identifier et de corriger le problème. Dans un GC de la langue, il est extrêmement difficile à détecter et alors que le programme ne plante pas, il peut commencer à les fuites de gros temps.Donc GC certainement évite balançant des pointeurs, mais si quelque chose aurait été bancale en C/C++ et ne pas être suspendu dans un GC de la langue, alors il est logique de fuite de ressource dans un GC de la langue et une erreur de segmentation en C/C++. Mettre une autre manière, GC échanges balançant des pointeurs pour balançant des ressources qui s'attardent autour de toujours. Il échange ce serait un bel écraser dans un silence de fuite qui peut être un débogage cauchemar de découvrir (et peut même passer inaperçue longtemps après la libération du produit). Donc, quelque chose comme un jeu ce qui est de la création de massif, la dynamique des mondes et des graphismes et la physique des objets et ainsi de suite et, éventuellement, à chaque image, de ressources logiques fuites sont une grosse affaire.
La collecte des ordures est meilleur lorsque les ressources des fuites ne sont pas une grosse affaire.
Ce scénario précédent est malheureusement trop commun dans un environnement d'équipe à l'aide de GC, surtout si chaque programmeur n'est pas très prudent de les écueils de la collecte des ordures et le fort besoin de références faibles. Donc, GC n'est pas nécessairement quelque chose à citer comme un avantage pour faire des jeux, sauf si vous êtes seulement de parler, sur le plus haut niveau de la nature de la logique humaine. Le niveau inférieur, délicate du système de la logique qui a constamment créer et d'accéder à et de détruire des ressources est généralement va mieux, même en termes d'éviter les fuites, sans elle.
Il n'est pas tout à fait vrai que la collecte des ordures n'est pas utilisé dans l'industrie du jeu. L'Unreal Engine 3 a la collecte des ordures mis en œuvre pour 'Script' classes. Pour eux, la performance est acceptable lorsque utilisé à la légère; le gros du travail est fait par code C /C++ qui gère sa propre mémoire.
Que le fortran dit, Java n'est pas vraiment utilisé dans l'industrie du jeu en raison de préoccupations au-dessus de la vitesse (Java exécute le code sur une machine virtuelle, pas nativement... la plupart du temps) et parce qu'il y a déjà un grand nombre de talentueux programmeurs qui ont écrit beaucoup de souvent utilisée par le code en C et C++. Ce n'est pas à dire que vous ne pouvez pas faire usage de Java, pour faire un jeu, parce qu'il y a un peu de jeux en Java, mais le "courant dominant" de l'industrie du jeu a investi lourdement dans un C /C++ backend.
fortran et James couvert assez bien déjà, mais une autre chose que je tiens à mentionner, qui fortran genre d'allusion quand on parle d'inertie, est la gigantesque piscine de bibliothèques disponibles en C++. Le fait d'avoir plusieurs bibliothèques C++ pour presque tout ce que vous pouvez peut-être penser, c'est une énorme raison de ne pas passer à Java. Cela ne veut pas dire qu'il n'y a pas de bibliothèques de Java pour le moment, mais le C++ sont déjà matures et ont une grande communauté de développeurs expérimentés. Ne pas avoir à réécrire la même chose que vous avez fait 1000x avant est un grand gain de temps.