salut.
J'aimerai implanter dans mon éditeur un système de script pour appeler dynamiquement les fonctions d'irrlicht.
Je n'ai jamais fais ce genre de chose et donc j'aurai aimé avoir quelques conseils : comme par exemple le choix du language et si il existe deja pour irrlicht une librairie ou du code qui permet de faire ca.
merci.
Dernière modification par Ikam (07-01-2013 07:42:30)
Hors ligne
Scripter Irrlicht est un travaille de longue haleine. Pour les script, j'utilise LUA mais je ne sais pas ce que ça vaut niveau performances. LUA est très facile à prendre en main mais irrEdit utilise des scripts Squirrel donc il doit être mieux je pense.
A mon avis, scripter Irrlicht est une mauvaise idée pour deux raisons :
1/ les scripts sont naturellement moins performants que du c++ compilé;
2/ à chaque version d'irrlicht, des modifications seront à apporter.
Je pense qu'il vaut mieux créé une classe avec des fonctions à scripter. Le script n'est pas fait pour écrire un programme, il est fait pour extérioriser le code qui changera selon les projets. C'est-à-dire que tu codes un moteur en c++ avec des appels de scripts au endroits clés puis dans tes scripts tu faits appels à des fonctions genre createNewScene("nom_du_fichier.scene"); et c'est ton moteur qui fera le reste. Car si tu parses ton fichier et créé tes objets avec les scripts ça va prendre des plombes!
Donc pour résumer, afin de gagner en temps et en performances, scriptes des fonctions globales, récurrentes et surtout de haut niveau.
Hors ligne
Je ne veux pas tout scripter, juste binder quelques fonctions comme par exemple ajouter un scenenode ou modifier ses attributs, mais rien qui entrera dans la boucle de rendu, en gros faire juste de la préparation de scène, donc ça ne devrait je pense pas ralentir le rendu final.
Est ce tu utilise une lib special pour LUA, genre irrlua (je sais pas si elle est encore d'actualité pour la derniere version d'irrlicht) ?
Hors ligne
Dans ce cas l'utilisation que tu veux en faire est bonne. Les langages de scripts ne se soucis pas de ce que tu veux scripter donc pas besoin de irrMachinTruc.^^
J'utilise LUA et Lunar (pour scripter les fonctions membres avec LUA).
Pour télécharger LUA c'est ici.
Pour l'utilisation de LUA et Lunar, c'est ici.
Le tutoriel est vraiment simple, il m'a permis de scripter des fonctions très facilement et rapidement.
Pour Lunar, il n'explique pas bien donc, en fait :
1/ tu vas sur cette page : [url= http://lua-users.org/wiki/CppBindingWithLunar]ici[/url];
2/ tu descends dans la page jusque "lunar.h for Lua 5.0";
3/ tu créé un fichier lunar.h (dans le répertoire des .h de LUA) et tu copies le code de :
extern "C" {
#include "lua.h"
#include "lauxlib.h"
}
jusque :
#define LUNAR_DECLARE_METHOD(Class, Name) {#Name, &Class::Name}
4/ tu as juste à inclure le fichier lunar.h et LUA sera inclu en même temps. Et il y a une lib à linker.
Ah, j'oubliais! Il y a aussi luacgui qui te permet de précompilé tes scripts. Disponible ici.
Maintenant, 1h ou 2 devrait suffir pour te faire la main.
EDIT:
Tiens j'ai retrouvé une classe d'essai que j'avais fait à l'époque. Associée au tuto, tu devrais pouvoir intégrer ça très vite.
Elle te montre comment intégrer LUA et LUNAR, comment créer une classe qui lance des scripts sur demande et une fonction à scripter.
Pour utiliser cette classe, tu créés une instance au début de ton programme, à chaque fois que tu veux lire un script tu utilises la fonction runScript("filename").
Lorsque tu quitte l'application tu détruis l'instance. C'est un exécuteur de script en fait.
ScriptReader.h
ScriptReader.cpp
Sript.lua
-- ligne qui affiche un texte dans la console (cette ligne est un commentaire à cause des "--") SR:SCRIPTREADER_print("Debut du Script : 1-Post_Lancement");
Dernière modification par johnplayer (07-01-2013 15:49:29)
Hors ligne
super, merci je vais essayer ca
Hors ligne
Tiens j'ai retrouvé une classe d'essai que j'avais fait à l'époque. Associée au tuto, tu devrais pouvoir intégrer ça très vite.
Elle te montre comment intégrer LUA et LUNAR, comment créer une classe qui lance des scripts sur demande et une fonction à scripter.
Pour utiliser cette classe, tu créés une instance au début de ton programme, à chaque fois que tu veux lire un script tu utilises la fonction runScript("filename").
Lorsque tu quitte l'application tu détruis l'instance. C'est un exécuteur de script en fait.
Hors ligne