Hola a todos,
Bienvenidos a un nuevo capitulo de como crear tu propio game engine y no morir en el intento.
Antes que nada disculpad por la tardanza pero este capitulo ha costado un poco más de lo que esperaba.
El capitulo de hoy tratará sobre el uso de XML tal y como se explicó en el capitulo 9 del curso de programación:
Los cambios implementados han sido cambiar todo los archivos de configuración en txt por xml. La forma estandar de implementar estos cambios se han realizado de la siguiente manera ( esto es solo un ejemplo, no cabrian todos los cambios implementados ):
void GUIManager::Init(int* argc, char* argv[])
{
char id[256]; //Cadena donde guardaremos el identificador de cada recurso
char ruta[256]; //Cadena donde guardaremos la ruta de cada recurso
TiXmlDocument doc( "Data\\LoadGUI.xml");
cout << "Inicializamos el GUI manager\n";
num_gui = 0;
if ( !doc.LoadFile() )
{
printf( "Could not load test file 'Data\\LoadGUI.xml'. Error='%s'. Exiting.\n", doc.ErrorDesc() );
exit( 1 );
}
TiXmlElement *root = doc.RootElement();
for(TiXmlElement* element = root->FirstChildElement(); element; element = element->NextSiblingElement())
{
//Leemos el elemento
sprintf(id,"%s", element->FirstChild("ID")->FirstChild()->Value()); //tomamos el ID
sprintf(ruta,"%s",element->FirstChild("ROUTE")->FirstChild()->Value()); //tomamos la RUTA
LoadGUI(id,ruta); //Cargamos el recurso
}
}
LoadGUI
void GUIManager::LoadGUI( char id[], char ruta[] )
{
char type[32],graf[32],var[32],max[32];
int xi,yi,xf,yf;
sprintf(loaded[num_gui].id,"%s",id);
loaded[num_gui].num_item = 0;
TiXmlDocument doc( ruta );
cout << "Cargamos GUI: " << ruta <<"\n";
if ( !doc.LoadFile() )
{
printf( "Could not load GUI FILE'. Error='%s'. Exiting.\n", doc.ErrorDesc() );
exit( 1 );
}
TiXmlElement *root = doc.RootElement();
for(TiXmlElement* element = root->FirstChildElement(); element; element = element->NextSiblingElement())
{
//Leemos el elemento
sprintf(type,"%s", element->FirstChild("TYPE")->FirstChild()->Value()); //tomamos el ID
sprintf(graf,"%s", element->FirstChild("GRAF")->FirstChild()->Value());
xi = atoi( element->FirstChild("xi")->FirstChild()->Value() );
yi = atoi( element->FirstChild("yi")->FirstChild()->Value() );
xf = atoi( element->FirstChild("xf")->FirstChild()->Value() );
yf = atoi( element->FirstChild("yf")->FirstChild()->Value() );
if(!strcmp(type,"BAR"))
{
sprintf(var,"%s", element->FirstChild("VAR")->FirstChild()->Value());
sprintf(max,"%s", element->FirstChild("MAX")->FirstChild()->Value());
sprintf(loaded[num_gui].lista[loaded[num_gui].num_item].actual ,"%s" , var );
sprintf(loaded[num_gui].lista[loaded[num_gui].num_item].max ,"%s" , max );
}
//Introducimos la información de este item
sprintf(loaded[num_gui].lista[loaded[num_gui].num_item].id ,"%s" , type );
sprintf(loaded[num_gui].lista[loaded[num_gui].num_item].graf ,"%s" , graf );
loaded[num_gui].lista[loaded[num_gui].num_item].xi = xi;
loaded[num_gui].lista[loaded[num_gui].num_item].yi = yi;
loaded[num_gui].lista[loaded[num_gui].num_item].xf = xf;
loaded[num_gui].lista[loaded[num_gui].num_item].yf = yf;
loaded[num_gui].num_item++;
}
num_gui++;
}
Los archivos de carga en XML son de este estilo:
<list>
<element>
<ID>PLAY</ID>
<ROUTE>Data/GUI/play.xml</ROUTE>
</element>
</list>
Y los archivos de configuración pueden ser de este estilo:
<list>
<element>
<TYPE>GRAF</TYPE>
<GRAF>GUI</GRAF>
<xi>0</xi>
<yi>0</yi>
<xf>640</xf>
<yf>100</yf>
</element>
<element>
<TYPE>BAR</TYPE>
<GRAF>GUIAMMO </GRAF>
<xi>100</xi>
<yi>10</yi>
<xf>500</xf>
<yf>20</yf>
<VAR>AMMO</VAR>
<MAX>MAXAMMO</MAX>
</element>
<element>
<TYPE>BAR</TYPE>
<GRAF>GUILIFE </GRAF>
<xi>100</xi>
<yi>40</yi>
<xf>500</xf>
<yf>50</yf>
<VAR>LIFE</VAR>
<MAX>MAXLIFE</MAX>
</element>
</list>
En breve os subiré el código a la zona de descargas....
Espero que os haya gustado y hayais aprendido.
Nos vemos
Blog de programación enfocado a estudiantes principiantes de C/C++ en español. Dispone de cursos de todos los niveles y para multitud de usos.
lunes, 29 de agosto de 2011
GameEngine: Capitulo 28 . Usando XML
Entradas populares
-
Una pregunta que me hacen en muchas ocasiones es ¿¿qué significa %2?? La respuesta tiene dos acepciones en función de si lo estamos u...
-
<< Ejemplo anterior Artículos Relacionados Ejemplo siguiente >> Hola a todos, ASCII Art es el hecho de hacer di...
-
Articulo perteneciente a : Referencias de programación Hola a todos Os pongo una aportación que a más de uno le irá bien, un resumen de ...
-
<< Ejemplo anterior Artículos Relacionados Ejemplo siguiente >> Hola a todos, El ejercicio de hoy se basa en c...
-
Capítulo perteneciente al tutorial de opengl desde cero Hola a todos, Este capítulo tal vez es de lo más complicados de la teoría necesa...
-
<< Capítulo anterior Artículos Relacionados Capítulo siguiente >> Hola a todos, Este tutorial intenta ser e...
-
<< Capítulo anterior Artículos Relacionados Capítulo siguiente >> Hola a todos... Un compañero vuestro ha...
-
Hola a todos... He aquí la primera entrega "Como crear tu propio motor de videojuegos y no morir en el intento". Antes que nada ...
-
<< Capítulo anterior Artículos Relacionados Capítulo siguiente >> El c apitulo de hoy trata sobre las instrucc...
-
Hola a todos Ya que he recibido un par de mails pidiéndome información sobre SEO, os adjunto unos cuantos trucos que he ido aprendiendo du...
0 comentarios :
Publicar un comentario