IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SDL Discussion :

Structure de moteur


Sujet :

SDL

  1. #1
    Membre habitué Avatar de poussinphp
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 428
    Points : 176
    Points
    176
    Par défaut Structure de moteur
    Bonjour à tous !

    Je suis sur l'élaboration d'un moteur SDL/FMOD en C++. J'ai crée des class pour la gestion des sprites (mouvement chargement...), gestion des cartes (chargement du fichier carte, allocation, collision), et son (lire, arreter...).

    Voulant profiter d'une console que ça soit pour tester in-game ou faire quelques manipulations, je me suis rendu compte que la structure de mon moteur etais un peu "mal fouttue".

    Je m'explique.

    J'ai plusieurs fichier .h et .cpp. chaque fichier est nommé celon la fonction qui lui est propre : sprite.cpp | sprit.h (gestion des sprites). J'ai un fichier includes.h qui gere les includes. il inclut tout les fichiers .h du projet et je declare ce fichier en include dans chaque fichier .cpp.

    Avec l'implémentation de la console (sdl_console). Je n'arrivais aps à charger une carte dynamiquement. J'ai donc crée une classe engine qui contient un type map (autre class que j'ai crée). Par contre le type (son) ne marche pas

    Là, je me retrouve coincé car j'aurais voulu faire une gestion de scripts mais j'ai l'impression que ma structure est mal adapté

    Enfin bref. J'aurais voulu avoir quelques conseils sur la struture. Comment faites vous? Utilisez vous une master class qui inclut les type d'autres class ? Comment faire pour réduire le temps de compilation (qui commence à devenir long pour ma part ?)...

    merci par avance

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Pour les temps de compilation, en gros on ne peut pas faire pire que ce que tu fais actuellement

    On n'inclue toujours que ce dont on a besoin exactement, ni plus ni moins. On n'inclue surtout pas tous les en-têtes partout. Et dans les fichiers en-têtes ne déclarant qu'un pointeur ou une référence d'une classe, on utilise une déclaration anticipée.

    Si ton compilo le supporte (Borland, Visual C++) tu peux aussi regarder du côté des en-têtes précompilés, mais bon en théorie si tu optimises bien comme je le dis plus haut ça ne sert à rien.

    Sinon je ne comprends pas très bien ton problème. Tu as des erreurs de compilation, ou plus généralement de conception de classes ?

  3. #3
    Membre habitué Avatar de poussinphp
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 428
    Points : 176
    Points
    176
    Par défaut
    Merci pour les infos concernant les headers

    Non en faite j'ai pas réellement de problème de compilation. ça fonctionne bien mais je bloque. Comment expliquer....

    Disont que je ne voit pas trop comment gérer pour la suite
    Je vais devoir implémenter des scripts. Ces scripts permetteront de gerer l'affichage des personnages, de leur faire dire quelque chose celon l'evenement....

    En faite je voit pas comment faire d'un point de vue structure algorythmique. Faut t'il faire une class mère et ensuite tout faire hériter de cette class ou alors faut t'il les laisser séparé?

    En faite je cherche un moyen de faire un developpement propre et bien organisé car là, je sent que ça va très vite s'emmeller si je met pas tout au propre très rapidement et je manque de méthode.

  4. #4
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    De mon point de vue, tu devrais avoir une classe globale pour tes personnages qui déclare les fonctions virtuelles adéquates. Après, pour l'affichage, tu devrais déplacer les appels au moteur de rendu dans une classe à part, ceci afin de limiter les changements si tu passes d'un rendu 2D à un 3D, de Direct3D à OpenGL ou des trucs du genre.

  5. #5
    Membre habitué Avatar de poussinphp
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 428
    Points : 176
    Points
    176
    Par défaut
    J'ai du mal à visualiser ce que tu veut dire par "déplacer les appels au moteur de rendu dans une classe à part".

    Tu veut dire qu'il faut que je fasse une classe qui gere totalement une catégorie (pnj, cartes, etc...) puis faire une class qui apelle virtuellement via la class réelle qui gere les pnj, cartes etc... (une "pure interface" comme ça s'apelle je croit ).

    Je suis d'accord mais après comment gerer justement les scripts?

    Exemple bête que j'ai :

    Dans mon main, je doit charger une carte de démarrage. Je renseigne donc un ficier ville.map. Il le charge, il lance la carte, ça tourne
    Je déplace le personnage en case x=5 y=3 (c'est une porte d'un magasin). Là je sais depuis un ficier script que cette case doit ramener à magasin.map.
    c'est peut être bête mais si dans mon main j'ai fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    carte* macarte = new carte();
    macarte->charger("ville.map");
    Si j'obtient avec le script "magasin.map". Comment je gère ça? je connais pas d'avance le nom de l'objet (içi c'est "macarte" mais j'aurais bien pu l'appeler "toto", "titi", "tata" ....). Faudrais que j'ecrive
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    macarte->changer("magasin.map");
    Ensuite c'est là qu'intervient mon problème de structure. Faudrais peut être que la class carte soit dans la class engine ainsi que les sprites et tout le reste....

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    J'ai du mal à visualiser ce que tu veut dire par "déplacer les appels au moteur de rendu dans une classe à part".
    Ce qu'il voulait dire, c'est que tout ce qui concerne l'affichage devrait être encapsulé entièrement dans une classe bien séparée. Du genre "GraphicsManager", enfin tu vois le genre.

    A part ça, j'ai toujours pas saisi exactement ton problème

  7. #7
    Membre habitué Avatar de poussinphp
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 428
    Points : 176
    Points
    176
    Par défaut
    Justement, le faite de savoir comment découper les class m'aide beaucoup. J'avais besoin de comprendre comment organiser mon moteur. C'est simple de tout coder comme ça mais j'aimerais qu'il soit portable et utilisable sur d'autres projets que le mien.

    Quand je parle de strucutre, organisation, je parle de comment regrouper mes class de façon à ne pas être bloquer, rester souple et facilement modulable.

    Me reste qu'une chose à regler c'est de comprendre comment créer des objets sans l'ecrire soit meme et depuis le script . D'ou l'idée de tout mettre dans une class "mère", comme ça je crée un objet nommé toto et je sais que c'est dans toto que j'aurais tel fonction. Après, je pense que le reste de la structure je voit plus ou moin comment modifier le tout pour avoir une meilleure souplesse et un meilleur eclaircissement possible grâce à vous.

  8. #8
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Si tu mets tout dans une classe mère, c'est que tu fais une façade pour le monde extérieur, c'est pas utile pour un moteur 3D que tu fais. D'ailleurs, une façade ne contient pas les classes.
    Il ne devrait pas y avoir de super classe de tout dans un moteur, une voiture est la somme de plusieurs sous-ensembles, le moteur, les sièges, ... qui sont eux-mêmes des sous-ensembles auquel d'autres éléments accèdent - le tableau de bord ne parle pas à la voiture pour parler au moteur, il s'adresse directement au calculateur par exemple -

  9. #9
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    En fait tu cherches à savoir comment interfacer ton appli avec un système de scripts ? C'est ça ?

  10. #10
    Rédacteur
    Avatar de MrDuChnok
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2002
    Messages
    2 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 112
    Points : 4 240
    Points
    4 240
    Par défaut
    Salut,

    Moi d'après ce que j'ai compris, c'est là il est arriver à un point où c'est le bordel ! lol.
    Il peut plus rien rajouter simplement sans que ça mette le bazar ailleur.
    Il aimerait donc avoir une structure de moteur, c'est à dire avoir une arborescence (squelette) d'un moteur graphique basique.
    Il a toutes les fonctionnalités, mais ne sais pas comment les arranger correctement.
    Enfin c'est à peu près ça, non ?
    Si vous jugez mon post utile dans la résolution de votre problème, n'hésitez pas à utiliser le système de vote afin d'améliorer la qualité du forum

  11. #11
    Membre habitué Avatar de poussinphp
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    428
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 428
    Points : 176
    Points
    176
    Par défaut
    Pas réellement. En faite je suis un peu perdu.

    Pour changer de carte depuis la console in-game je doit crée un objet et l'exporter dans l'autre fichier (je crée dans le main.cpp et exporte pour le console.cpp qui contient les commandes necessaire).

    Jusque là ça va mais si je doit crée des objets à chaque fois et que je me retrouve avec une liste d'export c'est pas terrible. ça va croiser de partout les variables et ça va finir par chaque fichier appelle tout = c'est une usine à gaz.

    J'aimerais pouvoir organiser mon moteur de façon à ce qu'il se sépare de mon main.cpp. je crée l'objet, je l'utilise = ça tourne. et non pas trifouiller partout dans les .h

    Je voit pas comment réorganiser mon moteur. Dans le main je crée des objets mais j'ai pas réellement l'impression de séparer moteur / jeu

Discussions similaires

  1. Structure table pour moteur de recherche
    Par sunshine33 dans le forum Requêtes
    Réponses: 0
    Dernier message: 04/02/2008, 14h32
  2. structure de moteur - erreus bizarres
    Par poussinphp dans le forum Développement 2D, 3D et Jeux
    Réponses: 3
    Dernier message: 27/04/2007, 07h24
  3. [Structure] moteur OO
    Par eclesia dans le forum Moteurs 3D
    Réponses: 17
    Dernier message: 31/03/2007, 16h49
  4. Structure d'un moteur
    Par Invité dans le forum Moteurs 3D
    Réponses: 38
    Dernier message: 08/02/2007, 18h34
  5. Structure d'un moteur de jeu
    Par black.out dans le forum Développement 2D, 3D et Jeux
    Réponses: 9
    Dernier message: 19/04/2006, 17h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo