Historique des modifications - Message

Message #10710

Sujet: Test de gravité - Irrlicht + Newton


Type Date Auteur Contenu
Création du message 24-08-2012 08:30:33 johnplayer
Pour ton onEvent, je vois ce que tu veux dire. Mais pour ce qui est de séparer Irrlicht dans une classe en héritant de IEventReceiver, c'est quasi-impératif. Crois-en mon expérience, j'ai pensé comme toi au début jusqu'à ce que je m'aperçoive d'un gros problème : si tu créé une classe eventReceiver (obligatoire pour gérer les events) et que tu veux accéder à des variables de ton main, tu es obligé de déclarer ces variables en globales. Par contre, si tu créé la classe Irrlicht (qui sera réutilisable comme physics) tu n'auras plus ce problème. DONC fais-moi confiance et créé une classe pour la partie Irrlicht. De plus, tu as un avantage de faire une classe : tu peux dispatcher tes implémentations de fonctions sur plusieurs fichiers cpp. Ca évite d'avoir un fichier de 5000 lignes.

Pour ton histoire de OnEvent avec physics, tu peux faire ainsi :

Code c++ :


//! initialisation d'irrlicht et création de l'instance de Physics
Engine::init()
{
     // initialisation device, smgr...

     // mets en place la partie event pour que Engine::OnEvent soit appelée par Irrlicht
     device->setEventReceiver(this);

     // création de l'instance Physics
...
}

//! OnEvent de la class engine
bool Engine::OnEvent()
{
     // gestion des events irrlicht
...

     // gestion des events Physics (avec Physics* Physique membre de la classe Engine)
     return Physique->OnEvent();
}

//! OnEvent de la classe Physics
bool Physics::OnEvent()
{
     // gestion des events physics
...

     // aucun event traité
     return false;
}


ATTENTION : Lorsque tu as traité un événement dans une fonction OnEvent fait un return true. Tu le fais déjà mais c'est juste pour être sûr que tu y fasses bien attention.

Ensuite,

1 : oui c'est ça juste la boucle et peut-être aussi des variables locales à déclarer avant l'entrée de boucle.

2 : oui, on évite les initialisations comme device, smgr et driver dans les constructeurs. la fonction init permet de renvoyer false si un problème est survenu. Tu peux donc quitter le programme sans planter grâce à la valeur de retour de init().

3 : Si tu fais le OnEvent comme je t'ai montré au-dessus, tu peux faire comme tu le voulais au départ^^.

Normalement ton main sera ultra-minimaliste genre :

Code c++ :


// en reprenant l'exemple que je t'ai donné quelques posts plus tôt
int main()
{
     Engine game();
     //! création de la fenetre, de la classe physics
     if( game.init() )
     {
          //! L'initialisation a réussie, lancement de jeu
          game.run();
     {
     //! libère Irrlicht, Newton, et quitte le programme
     return game.quit();
}


C'est une structure de programme que j'ai composé au fur et à mesure que j'ai créé mes petits programmes. J'essaie juste de te faire gagner du temps et de t'éviter des prises de tête (et donc tu pourras garder tes cheveux plus longtemps^^).
Avant d'arriver à structurer mon programme correctement, j'ai réécris certains de mes programmes plusieurs fois en changeant la structure pour corriger des problèmes.

Retour

Options Liens officiels Caractéristiques Statistiques Communauté
Préférences cookies
Corrections
irrlicht
irrklang
irredit
irrxml
Propulsé par Django
xhtml 1.0
css 2.1
884 membres
1440 sujets
11337 messages
Dernier membre inscrit: Saidov17
155 invités en ligne
membre en ligne: -
RSS Feed