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.-