Disons que j'ai un jeu écrit en C ++. Mais je veux y ajouter des fonctionnalités de modding ou de script. Comment procéder pour ajouter une fonctionnalité de script à votre jeu?
Tout d'abord, vous devez décider quelle partie de votre jeu est scriptée. Une option consiste à avoir un jeu entièrement scripté dans le sens où bien que les opérations de backend critiques soient codées en C ++, toute la logique du jeu est dans le langage de script. Les concepteurs utilisent le backend comme une API appelée à partir du langage de script de haut niveau. À l'autre extrême, vous pouvez avoir peu d'endroits spécifiques où les scripts sont utilisés, tels que l'interface utilisateur ou les séquences de script, la majorité du code du jeu étant toujours en C ++. Il y a des avantages à chaque approche (vitesse, flexibilité, temps de compilation, portée du jeu, etc.), mais vous devez en décider au préalable.
Une fois que vous savez comment vous souhaitez utiliser les scripts, vous devez maintenant décider si vous allez utiliser un langage de script existant ou votre propre langage spécifique au domaine . Aujourd'hui, il existe de nombreux langages de script avec différents objectifs de conception et différents publics cibles, donc je ne sais pas si cela vaut la peine de créer le vôtre. Si vous décidez de mettre en œuvre le vôtre, voici quelques ressources:
Lua est un langage de script léger et facile à intégrer. Il utilise une pile pour la communication entre l'hôte et le langage intégré et il a été utilisé avec succès dans de nombreux jeux professionnels . Sol2 simplifie le processus de liaison de Lua et C ++. Si vous n'aimez pas la syntaxe de Lua, Moonscript est un langage qui se compile en Lua et ajoute un bel ensemble de fonctionnalités.
D'autres options incluent AngelCode , qui vous permet d'appeler directement les fonctions C et C ++. Python et Ruby sont un peu plus complexes à intégrer, mais sont très agréables à programmer. Si vous souhaitez intégrer Python, jetez un œil à Boost.Python . Une autre idée consiste à intégrer JavaScript pour tirer parti des moteurs de script rapides développés pour les navigateurs (voir V8 et SpiderMonkey ).
J'ai implémenté un langage de script pour mon projet de jeu actuel, et le principal avantage est un contrôle total sur les primitives de langage. Les solutions de script prédéfinies sont génériques et vous n'aurez peut-être pas besoin de toutes les fonctionnalités qu'elles offrent. Vous ne devez absolument pas penser à rouler votre propre langue à moins d'être certain que vous pouvez faire quelque chose de mieux pour votre jeu qu'une solution existante.
Jon Purdy
Personnellement, j'aime Guile , il a une grande intégration avec C. Seul problème est la vitesse, mais avec la version 2.0 dans les deux prochains mois qui devrait également s'améliorer.
Joe D
Excellente réponse. Le premier paragraphe peut être résumé comme «les développeurs de jeux créent une API qui est consommée pour le contenu».
ashes999
Le terme générique pour les langages personnalisés (script ou autre) est DSL, ce qui peut aider à savoir si vous souhaitez lire.
Patrick Hughes
2
J'ai écrit un article sur l'intégration du script GameMonkey à un jeu utilisant DragonFire SDK ici .
Fondamentalement, l'idée est d'exposer vos fonctions C \ C ++ au langage de script choisi et de les utiliser à partir de votre script. Dans mon tutoriel, j'ai exposé 2 fonctions du DragonFire SDK. Au début du jeu, j'appelle la fonction onStart à partir du script et lors de la mise à jour, j'appelle la fonction onTimer à partir du script.
Réponses:
Tout d'abord, vous devez décider quelle partie de votre jeu est scriptée. Une option consiste à avoir un jeu entièrement scripté dans le sens où bien que les opérations de backend critiques soient codées en C ++, toute la logique du jeu est dans le langage de script. Les concepteurs utilisent le backend comme une API appelée à partir du langage de script de haut niveau. À l'autre extrême, vous pouvez avoir peu d'endroits spécifiques où les scripts sont utilisés, tels que l'interface utilisateur ou les séquences de script, la majorité du code du jeu étant toujours en C ++. Il y a des avantages à chaque approche (vitesse, flexibilité, temps de compilation, portée du jeu, etc.), mais vous devez en décider au préalable.
Une fois que vous savez comment vous souhaitez utiliser les scripts, vous devez maintenant décider si vous allez utiliser un langage de script existant ou votre propre langage spécifique au domaine . Aujourd'hui, il existe de nombreux langages de script avec différents objectifs de conception et différents publics cibles, donc je ne sais pas si cela vaut la peine de créer le vôtre. Si vous décidez de mettre en œuvre le vôtre, voici quelques ressources:
Lua est un langage de script léger et facile à intégrer. Il utilise une pile pour la communication entre l'hôte et le langage intégré et il a été utilisé avec succès dans de nombreux jeux professionnels . Sol2 simplifie le processus de liaison de Lua et C ++. Si vous n'aimez pas la syntaxe de Lua, Moonscript est un langage qui se compile en Lua et ajoute un bel ensemble de fonctionnalités.
D'autres options incluent AngelCode , qui vous permet d'appeler directement les fonctions C et C ++. Python et Ruby sont un peu plus complexes à intégrer, mais sont très agréables à programmer. Si vous souhaitez intégrer Python, jetez un œil à Boost.Python . Une autre idée consiste à intégrer JavaScript pour tirer parti des moteurs de script rapides développés pour les navigateurs (voir V8 et SpiderMonkey ).
la source
J'ai écrit un article sur l'intégration du script GameMonkey à un jeu utilisant DragonFire SDK ici .
Fondamentalement, l'idée est d'exposer vos fonctions C \ C ++ au langage de script choisi et de les utiliser à partir de votre script. Dans mon tutoriel, j'ai exposé 2 fonctions du DragonFire SDK. Au début du jeu, j'appelle la fonction onStart à partir du script et lors de la mise à jour, j'appelle la fonction onTimer à partir du script.
J'espère que ça t'as aidé!
la source