Bonjour,
Je suis sur un projet de jeu d'aventure en 3d genre les chevaliers de baphomets.
Je préfère ne pas en parler car je risque de ne jamais le mener au bout comme tous mes projets.
Enfin passons, j'utilise beaucoup les fichiers xml. Jusqu'à maintenant je ne faisais que les lire. Mais je me suis attaqué au menu et je veux sauvegarder ma config. Mais la c'est le drame.
Donc avant je lisais les fichiers xml sans problème et je les creait avec l'éditeur de texte.
Maintenant mon programme en cree un tres bien, je le lis tres bien avec mon navigateur internet. Mais irrlicht ne semble pas réussir à le lire : xml->read() renvoie 0.
Le fichier xml créé par irrlicht est au format UTF16 ou UTF32 alors que celui que j'avais créé à l'éditeur de texte en UTF8, c'est la seul différence.
Mais je vois pas pourquoi irrlicht ne lirais pas de l'UTF32.
Je vous passe les fonctions concerné :
Lecture :
IXMLReader* xmlConfig = device->getFileSystem()->createXMLReader(pathConfig.c_str());
if (xmlConfig)
log(stringc("Finded config file ") + pathConfig + " reading it...");
else
{
log(stringc("Can't find config file ") + pathConfig + " quitting...");
return 1;
}
while(xmlConfig && xmlConfig->read())
{
log(stringc("startmenu "));
if (xmlConfig->getNodeType()==EXN_ELEMENT)
{
if (core::stringw("device") == xmlConfig->getNodeName())
{
dr = E_DRIVER_TYPE(xmlConfig->getAttributeValueAsInt(L"driver"));
}
else if (core::stringw("dimension") == xmlConfig->getNodeName())
{
dim = dimension2d<s32>(xmlConfig->getAttributeValueAsInt(L"width"),xmlConfig->getAttributeValueAsInt(L"height"));
}
else if (core::stringw("pixel") == xmlConfig->getNodeName())
{
bits = xmlConfig->getAttributeValueAsInt(L"bits");
}
else if (core::stringw("fullscreen") == xmlConfig->getNodeName())
{
fullscreen = xmlConfig->getAttributeValueAsInt(L"fs");
}
else if (core::stringw("stencilbuffer") == xmlConfig->getNodeName())
{
stencilbuffer = xmlConfig->getAttributeValueAsInt(L"sb");
}
else if (core::stringw("vsync") == xmlConfig->getNodeName())
{
vsync = xmlConfig->getAttributeValueAsInt(L"vs");
}
else if (core::stringw("local") == xmlConfig->getNodeName())
{
lang = xmlConfig->getAttributeValueAsInt(L"lang");
}
else if (core::stringw("main") == xmlConfig->getNodeName())
{
pathMain = xmlConfig->getAttributeValue(L"file");
}
else if (core::stringw("startmenu") == xmlConfig->getNodeName())
{
log(stringc("startmenu ") + xmlConfig->getAttributeValue(L"file"));
pathStart = xmlConfig->getAttributeValue(L"file");
}
}
}
xmlConfig->drop();
Ecriture:
int startmenu::saveConfig()
{
IXMLWriter* xmlConfig = device->getFileSystem()->createXMLWriter(pathConfig.c_str());
if (!xmlConfig)
return 1;
xmlConfig->writeXMLHeader();
xmlConfig->writeElement(L"config");
xmlConfig->writeLineBreak();
xmlConfig->writeElement (L"device", true, L"driver", stringw(dr).c_str());
xmlConfig->writeLineBreak();
xmlConfig->writeElement (L"dimension", true, L"width", stringw(dim.Width).c_str(), L"height", stringw(dim.Height).c_str());
xmlConfig->writeLineBreak();
xmlConfig->writeElement (L"pixel", true, L"bits", stringw(bits).c_str());
xmlConfig->writeLineBreak();
xmlConfig->writeElement (L"fullscreen", true, L"fs", stringw(fullscreen).c_str());
xmlConfig->writeLineBreak();
xmlConfig->writeElement (L"stencilbuffer", true, L"sb", stringw(stencilbuffer).c_str());
xmlConfig->writeLineBreak();
xmlConfig->writeElement (L"vsync", true, L"vs", stringw(vsync).c_str());
xmlConfig->writeLineBreak();
xmlConfig->writeLineBreak();
xmlConfig->writeElement (L"main", true, L"file", stringw(pathMain).c_str());
xmlConfig->writeLineBreak();
xmlConfig->writeElement (L"local", true, L"lang", stringw(lang).c_str());
xmlConfig->writeLineBreak();
xmlConfig->writeLineBreak();
xmlConfig->writeElement (L"startmenu", true, L"file", stringw(pathStart).c_str());
xmlConfig->writeLineBreak();
xmlConfig->writeClosingTag(L"config");
xmlConfig->writeLineBreak();
xmlConfig->writeLineBreak();
xmlConfig->drop();
return 1;
}
Dark calculator
P.S. : J'ai aussi des problèmes avec les xml créé par irrfonttool avec la version linux tandis que j'ai pas de problème avec ceux crée sous wine avec la version win32-visualcpp
P.P.S. : Oui j'ai oublié de préciser que je suis sous linux debian avec irrlicht 1.5, a mon avis le problème vient de cette version de irrlicht et de linux