Question

Je souhaite intégrer le code Javascript dans l'un de mes moteurs de jeux. Maintenant que la 5ème génération de moteurs Javascript est sortie (tous très rapides), je suis curieux de savoir quel moteur choisiriez-vous d'intégrer dans un framework C ++ (qui inclut une réelle facilité d'intégration)?

Remarque: pour que tout soit clair, je ne suis pas intéressé par les scripts DOM ou l'écriture de Javascript dans un navigateur.

Voici une compilation des liens et des astuces du fil

Pour mémoire, j'adore Lua et je l'ai déjà intégré environ 5 fois dans les moteurs de jeu au travail.

Cependant, il s’agit maintenant d’un projet de loisir, et je pense que la plupart des développeurs Web connaissent le langage Javascript et, en raison de ses développeurs ECMA, Flash et Flex, un moteur de jeu utilisant des scripts Javascript et XML serait plus convivial et plus adapté aux besoins des utilisateurs. avec une base d’utilisateurs plus large (et qui jusqu’à présent n’a pas eu la chance d’utiliser ses compétences pour les jeux), qu’une avec Lua (et il y en a beaucoup autour!).

Aussi pour l'enregistrement je vais utiliser la V8 sur celui-ci, principalement parce que j'aime bien son style C ++.

Était-ce utile?

La solution

Le SpiderMonkey de Mozilla est assez simple et bien documenté. . C'est une API C, mais il est facile de l'envelopper en C ++. Il peut être compilé pour être thread-safe, ce qui est utile pour les jeux, car vous voudrez probablement avoir votre logique principale dans un thread et la logique de l'interface utilisateur dans un second thread.

La version 8 de Google pourrait être un bon choix, car vous utilisez le C ++, mais Je n'ai pas encore d'expérience avec ça. Selon la documentation (merci à < a href = "https://stackoverflow.com/questions/93692/which-javascript-engine-would-you-embed-in-an-application#97195"> Daniel James ), V8 n'est pas un thread - sûr, bien que cela puisse changer à l'avenir.

Il existe également un SquirrelFish de WebKit , mais je n'ai pas pu en trouver une version autonome. Je cherchais plus tôt.

Autres conseils

J'ai essayé SpiderMonkey et V8. Avec SpiderMonkey, je ne pouvais rien faire fonctionner. Je n'ai même pas pu obtenir les exemples sur mozilla.org pour les compiler.

La V8 a fonctionné immédiatement et j’ai eu quelques notions de base en C ++ &; lt; - > L'interaction Javascript va assez vite. Il existe certaines listes Google pour les personnes utilisant la V8, et la plupart de mes questions y ont déjà été répondues.

Je pense que la v8 ne fonctionne que sur les processeurs x86, x64 et arm pour le moment. Ce qui pourrait être un inconvénient.

En ce qui concerne la sécurité des threads, à partir de include / v8.h :

 * Multiple threads in V8 are allowed, but only one thread at a time
 * is allowed to use V8.  The definition of 'using V8' includes
 * accessing handles or holding onto object pointers obtained from V8
 * handles.  It is up to the user of V8 to ensure (perhaps with
 * locking) that this constraint is not violated.

Vous pouvez en lire plus dans le fichier source (cela ressemble à de la documentation doxygen, mais ils ne semblent l'avoir mise nulle part).

Mise à jour: Ce commentaire a été supprimé il y a probablement quelque temps. Il semble que la v8 ait maintenant un objet Isolate qui représente une instance du moteur. Une seule <=> instance ne peut être utilisée que dans un seul thread à la fois, mais d'autres <=> instances peuvent être utilisées simultanément dans d'autres threads.

Est-ce que Java Script est vraiment le bon langage pour votre jeu? De nombreux jeux utilisent le langage de programmation Lua pour la génération de scripts. Il est facile à intégrer, très petit, compile sur presque toutes les plateformes et facile à apprendre.

Ceci est un peu hors sujet, mais il est important de sortir des sentiers battus pour bien faire les choses.

Le référence publié lors de la première apparition de la V8 a montré que la V8 était 1000% (ou peu importe) plus rapidement que les autres moteurs, ce qui favorisait fortement les moteurs qui étaient bons en récursivité. Si votre code utilise beaucoup de récursivité, alors la V8 pourrait vous donner un avantage significatif en termes de vitesse. Pour & Quot; monde réel & Quot; (actuellement, du moins) sur le Web, SquirrelFish Extreme semble être le gagnant haut la main pour le moment (voir mon blog sur le sujet pour les résultats de mes propres tests informels).

Comme d'autres l'ont souligné, la facilité d'intégration et la qualité de la documentation pourraient prévaloir sur la vitesse pure. Cela ne veut pas dire jack si vous ne livrez pas!

Lorsque vous parlez d'un moteur de script et de c ++, vous pouvez également envisager de chaiscript . Il est proche du script ecma (~ Javascript) et très facile à intégrer en c ++.

Vendeur à partir de la page Web:

  

... ChaiScript, en revanche, a été conçu à partir de zéro   avec l’intégration avec C ++ à l’esprit.   ...   ChaiScript n'a pas de méta-compilateur, pas de dépendances de bibliothèque, pas de construction   la configuration système requise et aucun bagage hérité de quelque nature que ce soit. À peut travailler   de manière transparente avec toutes les fonctions C ++ que vous lui exposez. Cela n'a pas   pour être dit explicitement à propos de tout type, il est centré sur la fonction.

     

Avec ChaiScript, vous pouvez littéralement commencer à écrire un script pour votre application en   en ajoutant trois lignes de code à votre programme et en ne modifiant pas votre   construire des étapes du tout.

J'attendrais que TraceMonkey, la prochaine évolution de SpiderMonkey, apparaisse. Plus rapide et mieux conçu. (Utilise le code donné par Adobe Flash).

Tracemonkey est fier de rendre les actions répétitives beaucoup plus rapides en optimisant de manière agressive la structure au moment de l'exécution, en fonction de l'utilisation réelle, ce qui s'avérerait pratique pour une augmentation du jeu supplémentaire.

Essayez Javascript .NET:

http://javascriptdotnet.codeplex.com/

Il implémente Google V8. Vous pouvez compiler et exécuter directement le code Javascript à partir de code .NET avec celui-ci, ainsi que fournir des objets CLI à utiliser également par le code Javascript. Et V8 est probablement le meilleur moteur jamais créé en termes de performances, il génère du code natif à partir de Javascript.

Vous pouvez également consulter V8 de Google. C'est assez nouveau, cependant.

Je garderais un oeil sur la v8 car elle crie comme un moteur javascript rapide, et je suis sûre qu'elle développera une prise en charge multi-plateformes à mesure qu'elle atteindra sa maturité.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top