Quel langage de script recommanderiez-vous pour un projet de jeu C ++? [fermé]

14

Par script ici, je veux dire non seulement de mettre des données de configuration dans un script, mais de scripter des parties du projet comme certaines méthodes de classe, tester une boucle de jeu spécifique, etc. Ce ne serait pas seulement pour accélérer le développement, mais aussi permettre aux joueurs de voir certaines d'entre elles des scripts pour peaufiner certains aspects du jeu.

Certains langages comme Lua ont des wrappers comme luabind, mais quand je l'ai utilisé dans le passé, il avait des problèmes car il ne supportait pas la redéfinition de méthode dans un contexte d'héritage.

Quelles sont vos suggestions de langue / wrappers à utiliser ou à ne pas utiliser?

Frédérick Imbeault
la source

Réponses:

9

Jeux vidéo avec
script Lua Moteurs de jeu avec script Lua

Je pense que Lua est le meilleur coup.

Cet article concerne l'intégration de Lua et C ++. Ça dit:

LuaBind est un excellent produit mais pour moi, il semblait trop compliqué. D'une part, le code n'est pas facile à suivre où se trouvent les classes et les objets. Voyant également que je voulais intégrer Lua dans une application wxWidgets, l'utilisation de modèles était un peu non non (vous pouvez lire les problèmes multiplates-formes sur le site wxWidgets).

Il existe de nombreuses autres bibliothèques de liaisons:

http://luabridge.sourceforge.net/
http://www.stackedboxes.org/~lmb/diluculum/
http://cpplua.sourceforge.net/
http://www.tecgraf.puc-rio.br/~ celes / tolua /

Quel est le meilleur wrapper C ++ / Lua?

Sélectionnez et profitez.

lcpp
la source
Oui, Lua est assez simple et très facile à intégrer avec C. En fait, c'est l'objectif principal de Lua, étant un langage intégré.
Marco Mustapic
Merci pour la référence sur LuaBind, peut-être que creuser dans d'autres bibliothèques de reliures me convaincra de reprendre Lua
Frédérick Imbeault
Je suggérerais toutefois d'exécuter vos scripts uniquement dans le thread principal et de lui fournir un allocateur de pool si les performances sont un problème.
Kylotan
5

J'ai aimé Chaiscript ; Je ne l'utilise pas depuis très longtemps, mais cela semble assez solide jusqu'à présent.

Contrairement à Python ou lua, il est construit à partir de zéro pour être utilisé avec C ++. Le processus de reliure semble beaucoup plus propre qu'avec luabind / etc.

Voici le résumé du site:

ChaiScript est le premier et le seul langage de script conçu à partir de zéro avec la compatibilité C ++> à l'esprit. Il s'agit d'un langage de type fonctionnel intégré inspiré d'ECMAScript.

ChaiScript est sous licence BSD.

Riley Adams
la source
Intéressant. Qu'en est-il des tests de performances? Existe-t-il une comparaison ChaiScript / Lua / Python?
au
Assez intéressant, y a-t-il des inconvénients / bugs / problèmes de performances que vous avez rencontrés jusqu'à présent?
Frédérick Imbeault
Je n'ai pas vu de benchmarks, mais je n'ai pas encore eu de problèmes de performances ... jusqu'à présent, ma principale prise en main serait qu'il ne convertit pas implicitement entre les types numériques (vous obtenez donc une erreur si vous passez un int à une fonction prenant un flotteur, etc.).
Riley Adams
1
Juste un FYI, puisque ce commentaire a maintenant 6 ans - ChaiScript fait maintenant des conversions numériques implicites.
lefticus
5

Je recommanderais Lua .
Python est également très populaire. De nombreux moteurs de jeu en vedette (Blender, par exemple) l'utilisent.
C ++ :: Boost a une bibliothèque pour travailler avec Python.
J'ai lu sur Squirrel , mais je ne l'ai pas utilisé.

Vous pouvez lire cette présentation de Game Engine . Il y a une Scriptingcolonne. Vous pouvez voir que Lua et Python sont les langages de script les plus populaires.

en haut à droite
la source
À propos de Boost, je pense que c'est peut-être une immense bibliothèque et beaucoup de choses ne sont pas très utiles dans tous les projets. En fait, Luabind utilise beaucoup Boost et c'est une des choses que je n'ai pas aimé.
Frédérick Imbeault
1
Je dirais que c'est un avantage. Vous avez beaucoup de solutions prêtes à l'emploi. Et votre projet n'a qu'une seule dépendance externe - Boost. Peu de petites bibliothèques (qui utilisent différents styles, approches, licences et peuvent à leur tour avoir des dépendances implicites externes) qui sont difficiles à mettre à jour, à synchroniser avec votre code et à maintenir.
au
1
Et vous n'incluez que les bibliothèques Boost (en-têtes) dont vous avez besoin. Le boost est énorme, mais peu vous importe jusqu'à ce que vous ayez besoin de ceci ou de cela.
au
Et à propos de python et Lua, existe-t-il des wrappers pour C ++ qui vous permettent de redéfinir les méthodes de classe, de créer de nouvelles méthodes, etc.? Et cette fonctionnalité peut-elle être contrôlée à partir du code C ++ (pour des raisons de sécurité)? Comme je l'ai dit, LuaBind fait ces choses mais échoue dans un contexte d'héritage, ce qui est assez courant dans un projet de jeu. Les méthodes que je voudrais redéfinir sont par exemple, les tests de boucle de jeu spécifiques, les méthodes de mise à jour d'entités comme le joueur, la méthode de mise à jour du monde du jeu lui-même, etc.
Frédérick Imbeault
Lua n'a pas de classes et d'objets, mais ils peuvent être émulés par des tables. Voici une bibliothèque Lua pour OOP que je préfère: love2d.org/wiki/MiddleClass .
au
4

Pourquoi ne pas construire le vôtre?

Si vous avez le temps, la patience et la volonté d'apprendre, vous pouvez toujours essayer de développer votre propre moteur de script avec toutes les fonctionnalités et la syntaxe dont vous avez besoin.

Les avantages

  1. Vous découvrirez une partie intéressante de l'informatique.
  2. En développant un moteur de script «en interne», il vous donne un contrôle complet du début à la fin en vous permettant d'adapter le moteur exactement à ce dont vous avez besoin.
  3. Si vous devez apporter des modifications plus tard, cela peut faciliter un peu la connaissance des entrées et sorties de votre propre base de code, plutôt que d'apprendre les entrées et sorties de quelqu'un d'autre.
  4. Vous n'aurez pas à vous soucier de garder votre moteur à jour avec les correctifs de quelqu'un d'autre.

Désavantages

  1. Temps. Peu de gens l'ont. Si vous avez besoin de quelque chose MAINTENANT, essayez un moteur déjà existant (comme l'un de ceux déjà suggérés).

  2. La vitesse. De nombreux moteurs de script existants sont très rapides - une solution personnalisée peut ne pas être aussi rapide.

  3. Taille de l'équipe. De nombreux moteurs de script existants ont de plus grandes équipes de personnes travaillant sur la base de code, qu'il s'agisse d'équipes privées ou de bénévoles mondiaux, il y a quelque chose à dire pour le code qui est vérifié et revérifié par de nombreuses autres personnes.

  4. Un moteur de script nécessite une certaine planification initiale pour être efficace. Il y a également beaucoup de travaux préparatoires à implémenter qui peuvent ne pas avoir du tout à voir avec le moteur de script réel.

  5. Votre base de joueurs / développeurs devra s'habituer à votre moteur de script. Cela peut ne pas être un problème si la syntaxe et la fonctionnalité sont presque les mêmes que la plupart des moteurs de script modernes, mais sachez-le.

Ce n'est en aucun cas une liste exhaustive. Si vous devez apporter une grande quantité de modifications au back-end d'un langage de script existant pour obtenir les fonctionnalités que vous souhaitez, OMI, vous devriez probablement rechercher un autre moteur qui correspond mieux à vos besoins ou simplement créer le vôtre.

Je me rends compte que les gens aiment tourner autour de "la paresse" et "ne pas réinventer la roue" mais je pense qu'il y a quelque chose à dire sur la façon dont ces choses sont faites. Et une implémentation spécifique sera probablement meilleure pour votre projet qu'une implémentation générique.

«Créer des systèmes de script en C ++» semble être le ou les articles préférés que les gens partagent lorsqu'ils discutent du sujet: http://www.gamedev.net/reference/list.asp?categoryid=76

Dalin Seivewright
la source
2
J'ai convenu que cela avait un avantage pédagogique particulier. Cela nécessite encore des connaissances et des compétences en théorie des langages de programmation (que beaucoup de gens pensent avoir) et des connaissances en théorie de l'informatique. Si cela répond à des coutures attrayantes pour quelqu'un, je suggérerais ces deux livres: amazon.com/gp/product/0136073476/ref=oss_product et amazon.com/gp/product/0534950973/ref=oss_product
Frédérick Imbeault
Vous seriez surpris de voir jusqu'où vous pouvez aller sans aucune connaissance réelle de ces choses. Beaucoup de MUD ont un langage de script qui n'est guère plus qu'une liste d'instructions avec quelques hacks pour activer les conditions, et pourtant ils peuvent accomplir beaucoup avec cela seul.
Kylotan
J'y suis allé, j'ai fait ça. J'ai beaucoup appris sur l'analyse, la conception de compilateurs, les machines de bytecode, tout ça. La prochaine fois, j'utiliserai probablement Lua et je l'apprécierai d'autant plus. :)
Kaz Dragon
2

J'ai essayé Lua, Python, Scheme et Squirrel. Lua a travaillé le mieux; il a une communauté plus large et un meilleur support que Squirrel, et des caractéristiques de mémoire et de performances bien meilleures que Python. Le schéma a très bien fonctionné aussi, et a un très petit interprète, mais il était difficile pour les concepteurs de tourner la tête autour d'un langage fonctionnel.

Crashworks
la source