Salut,
C'est mon premier message ici, j'ai lu ici et là; il est génial Irrlicht
je viens de faire une surprise. Les boutons ne disparaissent pas toujours, et oui
J'ai démarré le débogueur mais je ne retrouve pas la trace de ce bug...
L'app démarre, le menu init, et quand j'appuis sur Options, le ligne contenu dans l'eventreceiver
pour le clik de ^options^ ne semble pas s'effectuer, ou le nouveau draw n'est pas complètement
modifié...
Voilà du code:
public void initApp(){
// (...)
XCgui.initGUI_menu_elements();
// la loop principale
while (XCgame.device.Run() && !XCgame.appEnd)
{
if (XCgame.inMenu)
{
// affichage menu
XCgame.videoDriver.BeginScene(true, false, XCgui.GUIBackColor); // Zbuffer false car gui == 2D
XCgui.guienv.DrawAll();
XCgame.videoDriver.EndScene();
}
else if (XCgame.inGame)
{
// affichage jeu
XCgame.videoDriver.BeginScene(true, true, XCgame.GameBackColor);
XCgame.ingameText.Draw();
XCgame.device.SceneManager.DrawAll();
XCgame.videoDriver.EndScene();
}
else if (XCgame.inOptions)
{
// affichage des options
XCgame.videoDriver.BeginScene(true, false, XCgui.GUIBackColor);
XCgui.guienv.DrawAll();
XCgame.videoDriver.EndScene();
}
else
{
// juste au cas où l'on oubli de renverser les flags inMenu/inOptions qqpart ^^
Console.WriteLine("la loop principale ne sait pas où se brancher. XCgame.inMenu = true;");
XCgame.inMenu = true;
}
}
}
static public bool OnEvent(Event ev){
{...}
else if (ev.Caller.ID == (int)XCgui.GUIItems.PlaySingleXC)
{
Console.WriteLine("Vous voulez jouer.");
// enleve les boutons et met les flags d'aff au jeu
//XCgui.guienv.Dispose(); // on pourra le réinitialiser lorsque necessaire...
XCgui.disposeGUI_menu_elements();
XCgame.ingameText.Visible = true;
XCgame.inMenu = false;
XCgame.inOptions = false;
XCgame.inGame = true;
return false;
}
else if (ev.Caller.ID == (int)XCgui.GUIItems.Options)
{
Console.WriteLine("Vous allez dans les options.");
XCgui.XCLogo.Enabled = true;
XCgui.XCLogo.Visible = true;
XCgui.playSingleButton.Enabled = false;
XCgui.playSingleButton.Visible = false;
XCgui.playMultiButton.Enabled = false;
XCgui.playMultiButton.Visible = false;
XCgui.optionsButton.Enabled = false;
XCgui.optionsButton.Visible = false;
XCgui.exitButton.Enabled = false;
XCgui.exitButton.Visible = false;
XCgui.optionsDoneButton.Enabled = true;
XCgui.optionsDoneButton.Visible = true;
XCgame.ingameText.Visible = false;
XCgame.inMenu = false;
XCgame.inGame = false;
XCgame.inOptions = true;
return false;
} // fin ev.Type == EventType.GUIEvent
else if (ev.Type == EventType.KeyInputEvent && XCgame.inGame)
{
switch (ev.KeyCode)
{
case KeyCode.Escape:
// enable the useful buttons...
XCgui.initGUI_menu_elements();
XCgame.ingameText.Visible = false;
XCgame.inGame = false;
XCgame.inOptions = false;
XCgame.inMenu = true;
return false;
default:
return false;
}
}
return false;
} // fin device_OnEvent() */
Dernière modification par Esselfe (15-11-2006 16:41:18)
Hors ligne
j'ai trouvé...
la méthode GUIEnvironment.Dispose() n'équivaut pas une méthode custom du genre:
public static void disposeGUI_menu_elements(){ Console.WriteLine("disposeGUI_menu_elements()"); exitButton.Remove(); optionsDoneButton.Remove(); optionsButton.Remove(); playMultiButton.Remove(); playSingleButton.Remove(); XCLogo.Remove(); guienv = null; }
Maintenant cet appel est exécuté en allant vers le mode inGame... Dispose() sert à quoi?!
et initGUI_menu_elements() et appellé depuis l'event KEY_ESCAPE
depuis, pas de prob de déallocation/réallocation étranges
Hors ligne
Merci c'est bon à savoir ce genre de choses !
Hors ligne