Cambio de datos de un objeto con Lua (parte 2),, una explicacion mas detallada...

4 views
Skip to first unread message

Esteban Esteban

unread,
Dec 22, 2006, 1:27:11 PM12/22/06
to lua...@googlegroups.com
Hola:
      Yo denuevo,, me alegra saber,, que hay alguin que sepa,, de lo que hablo,, pues ya estoy pensando traducir todo el manual del Lua,, al español,, para entenderlo bien....
 
Mira me estoy basando en este ejemplo que estaba el Wiki,,, el nombre SimpleBindingCpp... ,, pero en realidad,, funciona no tengo como comprobarlo en la secuencia que yo deseo,, digamos que aqui solo trabaja con un objeto de un tipo,, yo lo que tengo es un array,,, con un campo (void*),,, que guarda objetos de diversos tipos,,,
 
en este ejemplo,, en el texto de lua,, segu en autor,,, dice que es capaz de cambiar un integer,,, un string y un float,, en en archivo llamado GameObject.h,,, y GameObject.cpp,,, declara los objetos que exporta a Lua,,, pero no estoy tan seguro de que realmente cambie el String,, o cambie el integer,,, de ese solo objeto,, pues cuando trato de depurar,,, con un break,, despues de que llamo al texto que esta escrito en Lua,, jamas pasa por la función,,, el programa da una direccion de un objeto,,, pero que seguridad tengo de que está cambiando realmente los objetos???,,
 
ahora,, yo esto estoy tratando de hacerlo,,, reduciendo,,, al minimo,, las funciones,,, lo dire de esta forma...
 
una structura como esta:
 
struct Enemigo {
    char  Nombre[32];
    int     Xpos;
    int     Ypos;
    char  ScritpLua[64];
public:
    Init();
    SetPosition(int, int);
    SetNombre(char *);
    Play();
}
 
ya entonces los declaro para exportarlos a Lua...,, con una Class Verdad !!!!
donde al inicializarla tomo el objeto Enemigo,,,
el void *dpData,, viene de un Array que tiene un campo void,, para almacenar diferentes copias con distintos datos de la structura Enemigo,, con diferentes datos cada una... por lo que al hacer una barrida,,, debe pasar,, y en el fondo ejecutar un archivo script,, porpio de cada uno,,, el nombre del archivo script esta guardado,, en ScriptLua,,,
 
 
class  LuaEnemigo {
private:
     Enemigo *pEnemy;
public:
    LuaEnemigo( void *dpData) {
         pEnemy = (Enemigo*) dpData;
    }
   ~LuaEnemigo()
 
   LuaEnemigo::SetNombre(lua_State *L){
       char NewNombre[32];
       NewNombre = lua_tostring(L, 1);         //. Supuestamente aqui recojo el nombre desde lua
      pEnemy->SetNombre(  NewNombre )   //. Ahora voy al Objeto Real y lo cambio.
   }
 
   LuaEnemigo::SetPosition(lua_State *L){
       int   cx = luaL_checknumber(L, 1);
       int   cy = luaL_checknumber(L, 2);
 
       pEnemy->SetPosition(cx, cy);          //. Ahora Voy al objeto real,,, y cambio la posicion.. 
   }
}
 
Esto es llamado desde el Array,, que previamente este lleno con los objetos...
 
for (int i = 0; i <MaxObjetos; i++){
      if(pCosas[ i ]. TipoData == ENEMIGOS_1){
          (Enemigo*) pCosas[ i ].dpData)->Play();
      }  else if(pCosas[ i ].TipoData == ANIMADOS){
          (Animados*) pCosas[ i ].dpData)->Play();
      }
}
 
donde la implicancia del metodo Play(),, es algo como (  Ojo solo estoy resumiendo la jerarquia de funcionamiento )
 
Enemigo::Play( )
{
    LuaL_LoadFile(  ScriptLua );    //. Debe ejecutar el Archivo Scrip Asignado para que actualize los datos de este solo objeto...
                                                 //. Con sus datos propios,, antes de llamas esta cosa,,, hay ponerlo como una variable global... y
                                                 //. despues poner el otro objeto como variable,, global,,, pero ahi ocurren cosas extrañas,, y se revuelven,, los datos..
}
 
Si ahora me captas un poco mejor la idea,,, y miras,,, el ejemplo de Wiki,,, pues te dire,,, que no encontre el punto donde Wiki asegura que los datos del objeto han cambiado... pues solo me muestra una dirección,, diferente,,, pero no creo que eso sea un cambio de datos en el objeto,,,,
 
te envio la fuente de Wiki,,, si hay al mal,, incluso allí,,, que fue mi base,, entonces esto debe hacerde de otra forma....
gracias de todos modos....
nunca pense que me responderían....
 
esbxp.-
 
 
 
LuaObject.zip

Jose L. Hidalgo

unread,
Dec 31, 2006, 9:15:23 AM12/31/06
to lua-es
Hola Esteban,
Perdona la tardanza, estos días estamos de vacaciones y la verdad
es que no he tenido tiempo de revisar el código. Cuando pueda le daré
un buen vistazo, necesito un poco de tiempo para asimilar lo que
quieres hacer :)

Un saludo, felices fiestas y próspero año nuevo!

Jose L.

> LuaObject.zip
> 16 KDescargar

Reply all
Reply to author
Forward
0 new messages