XML es un lenguaje de marcado extensible. En el desarrollo de juegos, a menudo se usa para guardar información del juego, como la puntuación más alta, el nivel del juego y otra información, y para describir algunos recursos. La primera vez que usé XML fue en "Creación de animaciones con CCAnimation". Cuando se usa el archivo plist para cargar la animación, se usa un archivo XML. El archivo plist es en realidad un archivo XML. El mapa de mosaicos se usa en Cocos2d-x (1) y el mapa de mosaicos se usa en Cocos2d-x (2). Después de guardar el mapa de mosaicos creado por el editor, obtendrá un archivo en formato tmx, que también es un archivo XML.
Los archivos XML también pueden resolver el problema de los códigos confusos en chino. Los códigos confusos de codificación china aparecen en Cocos2d-X debido a los diferentes métodos de codificación, que generalmente se utilizan en Windows.
VC se usa como IDE, VC usa codificación GTK y el chino usa codificación UTF-8. Debido a los diferentes métodos de codificación, el uso directo del chino en Cocos2d-X causará caracteres confusos, mientras que xml usa codificación UTF-8. Entonces, el uso de XML puede realizar la visualización de chino en Cocos2d-X.
No hablaré sobre temas teóricos. Si digo demasiado, no lo entenderé. Aquí hay algunos ejemplos para presentar la aplicación de XML en Cocos2d-X.
Ejemplo de programa 1: utilice CCUserDefault para leer la información en XML
Proceso de implementación:
1. Crea un archivo XML
2. Escriba la puntuación más alta en el archivo XML
3. Lea la puntuación más alta en el archivo XML
El código de creación del archivo XML:
// Guarda la puntuación más alta del juego en la memoria
CCUserDefault :: sharedUserDefault () -> setIntegerForKey ("Puntaje alto", 7000);
// Escribe la información de puntuación más alta del juego en el disco duro
CCUserDefault :: sharedUserDefault () -> flush ();
Después de una compilación exitosa, se generará un archivo xml llamado UserDefault.xml en el directorio Debug.
Código en UserDefault.xml: hay una puntuación más alta en UserDefault.xml:
-
7000
Lea la puntuación más alta en UserDefault.xml
// Lee la puntuación más alta del juego, devuelve 0 cuando no se lee
int highScore = CCUserDefault :: sharedUserDefault () -> getIntegerForKey ("Puntaje alto", 0);
// Imprime la puntuación más alta
CCLog ("highScore =% d", highScore);
Resultados del:
Ejemplo de programa 2: utilice un archivo XML en formato plist para guardar la información del usuario y leer la información del usuario 1
Proceso de implementación:
Cree un nuevo archivo xml formateado como plist, el contenido del archivo es el siguiente
nombre
Zhang Sanfeng
años
36
Agregar código al programa
// Crea una clase de diccionario para leer archivos xml en formato plist
CCDictionary * dict = CCDictionary :: createWithContentsOfFile (“aaa.plist”);
// Leer la información del nombre de aaa.plist
const CCString * nombre = dict-> valueForKey ("nombre");
// Leer información sobre la edad de aaa.plist
const CCString * edad = dict-> valueForKey ("edad");
// Imprime estas dos informaciones
CCLog ("el nombre es% s, la edad es% d", nombre-> getCString (), edad-> intValue ());
Resultados del:
22
Ejemplo de programa 3: utilice el archivo xml en formato plist para guardar la información del usuario y leer la información del usuario 2
Proceso de implementación:
Cree un nuevo archivo xml formateado como plist, el contenido del archivo es el siguiente
nombre
Zhang Sanfeng
años
36
familia
hijo
nombre
xxx
años
6
hija
nombre
yyy
años
3
Agregue el siguiente código al programa:
// Crea una clase de diccionario para leer archivos xml en formato plist
CCDictionary * dict = CCDictionary :: createWithContentsOfFile (“aaa.plist”);
// Leer la información del nombre de aaa.plist
const CCString * nombre = dict-> valueForKey ("nombre");
// Leer información sobre la edad de aaa.plist
const CCString * edad = dict-> valueForKey ("edad");
// Imprime estas dos informaciones
CCLog ("el nombre es% s, la edad es% d", nombre-> getCString (), edad-> intValue ());
// Leer información familiar de aaa.plist
CCObject * oFamily = dict-> objectForKey ("familia");
CCDictionary * dictFamily = (CCDictionary *) oFamily;
// Encuentra la información de hijo en el diccionario
CCDictionary * dictSon = (CCDictionary *) dictFamily-> objectForKey ("hijo");
// Obtener el nombre del hijo
nombre = dictSon-> valueForKey ("nombre");
// Obtener la edad del hijo
edad = dictSon-> valueForKey ("edad");
// Imprime la información del hijo
CCLog (“el nombre del hijo es% s, la edad del hijo es% d”, nombre-> getCString (), edad-> intValue ());
// Encuentra la información de hija en el diccionario
CCDictionary * dictdaughter = (CCDictionary *) dictFamily-> objectForKey ("hija");
// Encuentra el nombre de la hija
nombre = dictdaughter-> valueForKey ("nombre");
// Encuentra la edad de la hija
edad = dictdaughter-> valueForKey ("edad");
// Imprime la información de la hija
CCLog (“el nombre de la hija es% s, la edad de la hija es% d”, nombre-> getCString (), edad-> intValue ());
Resultados del:
Ejemplo de programa 4: creación de un analizador de archivos XML
Código de implementación:
#include "T40XML_tinyXML.h"
CCScene * T40XML_tinyXML :: escena ()
{
CCScene * s = CCScene :: crear ();
T40XML_tinyXML * capa = T40XML_tinyXML :: crear ();
s-> addChild (capa);
devoluciones;
}
void T40XML_tinyXML :: WalkOver (tinyxml2 :: XMLElement * nodo)
{
// Obtenga el primer nodo hijo debajo del nodo raíz
tinyxml2 :: XMLElement * curNode = nodo-> FirstChildElement ();
// Recorre los nodos en xml
while (curNode)
{
if (curNode-> FirstChild ())
{
CCLog (“el nodo es% s, el valor es% s”, curNode-> Value (), curNode-> FirstChild () -> Value ());
}
más
{
CCLog (“el nodo es% s, el valor es NULL”, curNode-> Value ());
}
WalkOver (curNode);
curNode = curNode-> NextSiblingElement ();
}
}
bool T40XML_tinyXML :: init ()
{
CCLayer :: init ();
// Crea un documento xml
tinyxml2 :: XMLDocument * doc = new tinyxml2 :: XMLDocument;
// Cargar documento xml
doc-> LoadFile (“aaa.plist”);
// Imprime todo el contenido en doc
tinyxml2 :: XMLElement * rootElement = doc-> RootElement ();
// Imprime el contenido en el nodo raíz en aaa.plist
CCLog (“el valor rootElemenet es% s”, rootElement-> Value ());
// Imprime la información de todos los nodos en aaa.plist
WalkOver (rootElement);
eliminar doc;
devuelve verdadero;
}