IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Développement 2D, 3D et Jeux Discussion :

Utiliser des fonctions c depuis lua : problemes de parametres


Sujet :

Développement 2D, 3D et Jeux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Avatar de TheDrev
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    310
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 310
    Par défaut Utiliser des fonctions c depuis lua : problemes de parametres
    Bonjour,
    j'aimerai utiliser Lua comme langage de script pour un rpg.
    afin de manipuler les elements du jeu plus dynamiquement (position et etats des personnages, objets, dialogues, etcaetera).

    Pour faciliter la communiquation entre le Lua et le c, j'ai créer quelques fonctions destinées a etre appellé (une sorte de mini API en quelques sortes).
    Cepandant, pour enregistrer une fonction c pour Lua, il faut qu'elle ai une signature de type int script_lua_unit_set_x(lua_State*L), logique, les fonction
    internes de Lua doivent certainement attendre un pointeur de fonction...

    Passer uniquement un lua_State est pratique pour passer des parametres depuis Lua a la fonction, mais comment faire pour passer mes structures c dans
    ces fonctions (structure personnage, objet, comme decrit plus haut) ? elle sont actuellement declare dans le main et passée aux
    seuls fonctions qui doivent les manipulées, comme tout bon programme Fais-je devoir les declarer en globale ? (...).

    Merci !

  2. #2
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Par défaut
    tu a intérêt à utiliser un binding qui va t'aider à faire ça. par exemple :
    http://mdeverdelhan.developpez.com/t...lua/tutoriel2/
    permet de passer des classe en paramètre à des fonction Lua.
    Si tu veut un truc plus évolué, tu peut aussi regarder du coté de luaBind, mais peso, je trouve qu'il est beaucoup trop lent à compiler que des projet qui prennent un peut d'importance
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  3. #3
    Membre très actif
    Avatar de TheDrev
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    310
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 310
    Par défaut
    merci pour votre reponse,
    j ai deja lu ce tutorial, mais je voudrai rester exlusivement en c pour ce projet (pour des raisons sentimental, l 'editeur de niveau etant en c++, j'experimente un peu l operabilite et la performance avec ce projet perso)

    lunar ce bind il avec des structures ?

    au fond, ce probleme aurait pu se poser avec des signaux posix ou un callback a la gtk, ou meme de l utilisation de glut, de facon plus large, comment raisoudre elegament ce probleme de signature obligatoire ? j ai besoin d acceder a une structure unite (personnage du jeu) mais ma fonction ne peut pas, et je suis bloque... dans tout ces cas je n ai jamais pu trouver comment !

  4. #4
    Rédacteur
    Avatar de bafman
    Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    2 574
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Novembre 2003
    Messages : 2 574
    Par défaut
    si tu regarde le code de lunar, tu doit pouvoir te debrouiller pour faire une version pure C prenant en compte tes structures (en fait, à priori, le plus dure est de prendre en compte les fonction membre, pas les data )
    * Il est infiniment plus simple de faire rapidement un code qui marche que de faire un code rapide qui marche
    * pour faciliter les recherches, n'oubliez pas de voter pour les réponses pertinentes
    Mes articles

  5. #5
    Membre très actif
    Avatar de TheDrev
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    310
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations forums :
    Inscription : Novembre 2006
    Messages : 310
    Par défaut
    j'ai un peu cogiter le probleme... premierement pour lire une variable c depuis lua, lua_pushstring va bien empiler la chaine dans le contexte coté lua ?

    pour une structure, je peut toujours créer une meta table depuis le c qui va reprendre les mêmes données que la stucture, puis de la pousser sur la pile coté Lua.

    Peut etre que je peut pousser des pointeurs dans le lua_State pour acceder a mes variables et structures c ?
    ou
    Pour repercuter les parametres Lua vers mes variables ou structures c, j'ai vu

    lua_touserdata

    [-0, +0, -]
    void *lua_touserdata (lua_State *L, int index);
    If the value at the given acceptable index is a full userdata, returns its block address. If the value is a light userdata, returns its pointer. Otherwise, returns NULL.


    Ok j ai regarde la source de lunar et je vais pouvoir faire quelque chose (en remettant de l'ordre dans toutes les idées vu ci dessus).
    Comme mes fonctions sont classées par fichiers et attendent en premier parametre systematiquement le pointeur de structure sur lequel le traitement se rapporte, on peut meme tenter de faire de l'objet comme le gere Perl...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 07/05/2006, 18h35
  2. [Xml/XSl] utiliser des fonction vb
    Par ekmule dans le forum XSL/XSLT/XPATH
    Réponses: 6
    Dernier message: 17/01/2006, 17h28
  3. [hibernate] utilisation des fonctions d'aggregation
    Par osopardo dans le forum Hibernate
    Réponses: 2
    Dernier message: 29/08/2005, 09h41
  4. utilisation des fonctions d'une dll
    Par jackk dans le forum C++
    Réponses: 14
    Dernier message: 15/06/2005, 16h50
  5. Utiliser des fonctions Pascal
    Par Neilos dans le forum C++Builder
    Réponses: 2
    Dernier message: 07/03/2004, 15h43

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo