Voila, j'ai un probleme avec un chargement de fichier. Pour lire un fichier, il faut un device et un filesystem. Jusque là, tout va bien. Maintenant il s'avère que ce fichier renferme les parametres de création de la fenetre de jeu... Un peu paradoxal tout ça! Mais bon, soit! Je créé une fenetre bidon pour le chargement du fichier, je la drop() puis je créé la deuxieme. Magnifique, ma fenetre apparait avec les bons parametres, donc le chargement a réussi . Et la, derriere ma seconde fenetre... la premiere qui n'a pas disparue! Je la ferme et la ça ferme les deux fenetres . Prise de tete, decorticage de la demo fournie avec Irrlicht qui a le meme syteme, mais pas moyen de faire disparaitre la premiere sans fermer la deuxieme avec! Alors si quelqu'un à ne serait-ce qu'une idée, qu'il l'expose avant que je n'ai plus de cheveux .
Hors ligne
J'espère que tu n'es pas encore chauve .
Peut-être pourrais-tu poster ton code qu'on voit ce qui peut clocher ?
Hors ligne
Voila le code :
bool Bibliotheque::load_config() { device = createDevice(); // device est une variable de la classe Bibliotheque ainsi que fileSys fileSys = device->getFileSystem(); // device est la pour avoir fileSys (pour la lecture xml) // lecture du fichier config.xml et stockage dans les variables int a = 0; // vérification de l'existance du fichier if (!(fileSys->existFile(stringc("Configuration/config.xml").c_str()))) return false; // ouverture du fichier en lecture IXMLReader *reader = fileSys->createXMLReader(stringc("Configuration/config.xml").c_str()); // boucle de lecture while(reader && reader->read()) { if(EXN_ELEMENT == reader->getNodeType()) { if(stringw("Graphismes") == reader->getNodeName()) { parametres.AntiAlias = vsBool(reader->getAttributeValueAsInt(L"AA")); parametres.Bits = ((reader->getAttributeValueAsInt(L"bits") + 1) * 16); parametres.DriverType = EDT_DIRECT3D9; parametres.EventReceiver = 0; parametres.Fullscreen = vsBool(reader->getAttributeValueAsInt(L"fullscreen")); parametres.HighPrecisionFPU = true; parametres.Vsync = vsBool(reader->getAttributeValueAsInt(L"vsync")); switch(reader->getAttributeValueAsInt(L"resolution")) { case 0 : { parametres.WindowSize = dimension2d<s32>(640,480); break; } case 1 : { parametres.WindowSize = dimension2d<s32>(800,600); break; } case 2 : { parametres.WindowSize = dimension2d<s32>(1024,768); break; } case 3 : { parametres.WindowSize = dimension2d<s32>(1280,1024); break; } } lod = reader->getAttributeValueAsInt(L"lod"); qualite_texture = reader->getAttributeValueAsInt(L"texture"); } // chargement des parametres graphiques }// if }// while //libération du fichier reader->drop(); // liberation de la fenetre device->drop(); // BIEN QUE JE LA DROP ELLE RESTE PRESENTE ET SI J'UTILISE closeDevice() JE FERME CETTE FENETRE EST CELLE // QUE J'OUVRE DERRIERE return true; } bool Bibliotheque::create_window() { device = createDeviceEx(parametres); // VOICI LA 2e FENETRE, CELLE DU JEU if (device) return true; else return false; } bool Bibliotheque::create_environnement() { driver = device->getVideoDriver(); smgr = device->getSceneManager(); env = device->getGUIEnvironment(); fileSys = device->getFileSystem(); if(driver && smgr && env && fileSys) return true; else return false; }
Donc je fais : load_config() puis create_window() et la traditionnelle boucle de rendu se trouve dans le fichier source les appelant.
J'espère que ça ira.
PS : Sinon pour mes cheveux, ça fais que je n'aurais pas besoin d'aller au coiffeur demain . Eh, hop! Une facture de plus en moins!( notez le subtile mélange de superlatifs ).
Dernière modification par johnplayer (19-04-2009 09:39:36)
Hors ligne
Sinon, au lieu de m'obstiner à créer une fenetre pour en récupérer le fileSytem, ne pourrais-je pas en créer une instance pour mon chargement? Si oui, comment?
J'ai trouvé ça dans CFileSystem.cpp :
//! creates a filesystem which is able to open files from the ordinary file system,
//! and out of zipfiles, which are able to be added to the filesystem.
IFileSystem* createFileSystem()
{
return new CFileSystem();
}
Mais comment l'utiliser?!
Dernière modification par johnplayer (19-04-2009 11:06:08)
Hors ligne
Super ça marche nickel! Merci de m'avoir retirer cette épine du pied . Dur d'être autodidacte. Ah, maintenant que j'y pense, bonne continuation pour ton projet Copland.
Hors ligne
Tant mieux si ça marche bien et content d'avoir pût t'aider .
Autodidacte je le suis également et j'en apprends encore tout les jours.
Merci pour la bonne continuation, à toi aussi.
@bientôt
Hors ligne
SInon pour la première fenetre d'utilisait le NULLDEVICE ou pas? car sinon le problème pourait venir de là.
Dernière modification par dark calculator (21-04-2009 01:19:17)
Hors ligne
Je ne vois pas ce que tu entends par "utiliser le NULLDEVICE". Pour ma fenetre je la créais comme suit :
device = createDevice();
Voilà.
Hors ligne
Si tu fais à la place de createDevice() un createDevice(EDT_NULL) il ne devrait pas avoir de fenètre qui s'ouvre.
Remarque je crois que moi sous linux il ferme bien la fenêtre après un drop device mais avec le même code sous win il la laisse ouverte, c'est assez bizarre enfin pas tant que ça mais embetant.
Hors ligne
Ah, ok! Merci de la précision . Je testerais ça pour vérifier.
Hors ligne
Options | Liens officiels | Caractéristiques | Statistiques | Communauté |
---|---|---|---|---|
Corrections |
|
xhtml 1.0 css 2.1 Propulsé par FluxBB Traduit par FluxBB.fr |
882 membres 1429 sujets 11119 messages |
Dernier membre inscrit: LiseBuisson96 74 invités en ligne Aucun membre connecté RSS Feed |