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

XNA/Monogame Discussion :

DrawableGameComponent ou pas ?


Sujet :

XNA/Monogame

  1. #1
    Membre habitué Avatar de Khrysby
    Homme Profil pro
    Chef de projet
    Inscrit en
    Avril 2005
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet

    Informations forums :
    Inscription : Avril 2005
    Messages : 239
    Points : 144
    Points
    144
    Par défaut DrawableGameComponent ou pas ?
    Bonjour,

    Je commence à me lancer dans le développement de jeux avec XNA.
    J'ai une question quand à la création d'un objet player par exemple.

    J'ai vu 2 méthodes et j'aimerai savoir quelle est la mieux ?
    - Une méthode dont la class player étend DrawableGameComponent. Il faut implémenter les méthodes qui vont bien (Initialize, Update, Draw, LoadContent et UnloadContent).
    Bon, j'ai testé cette méthode et j'ai eu un soucis car l'appli ne passe pas par la méthode LoadContent, là où je chargais mes texture.

    - Seconde méthode : Ne pas étendre de DrawableGameComponent et ne mettre que les 2 méthodes suivantes : Update et Draw.

    Je pense que je vais utiliser la 2 mais j'aimerai avoir quelques avis sur la question.

    Merci d'avance.
    Mickaël

  2. #2
    Membre expert

    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Février 2006
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 1 031
    Points : 3 092
    Points
    3 092
    Par défaut
    Pour que le LoadContent soit appelé il ne faut pas oublier d'appeler base.Initialize(); dans ton initialize.

    Pour un débutant hériter de DrawableGameComponent peut être intéressant.
    Pour du développement sérieux c'est une classe à éviter tout comme spritebatch.
    Suivez le développement de Chibis Bomba
    twitter : https://twitter.com/MoD_DiB
    DevBlog : http://moddib.blogspot.fr/

  3. #3
    Membre habitué Avatar de Khrysby
    Homme Profil pro
    Chef de projet
    Inscrit en
    Avril 2005
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet

    Informations forums :
    Inscription : Avril 2005
    Messages : 239
    Points : 144
    Points
    144
    Par défaut
    Merci MoDDiB pour ta réponse.

    Le mieux au final ce serait donc la 2eme solution. Si on veut avoir un projet sérieux.

    Pourquoi faut-il éviter spritebatch ?

    Pour ma première solution, j'avais bien mis base.Initialize(); dans mon initialize

    Merci d'avance
    Mickaël

  4. #4
    Membre expert

    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Février 2006
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 1 031
    Points : 3 092
    Points
    3 092
    Par défaut
    Citation Envoyé par Khrysby Voir le message
    Pourquoi faut-il éviter spritebatch ?
    Pour des problèmes de performances, de manque de flexibilité et de difficulté de debugger en cas de soucis.
    Tant que tu ne ressens pas un de ses problèmes là avec spritebatch ne t'embêtes pas à réinventer la roue.
    Suivez le développement de Chibis Bomba
    twitter : https://twitter.com/MoD_DiB
    DevBlog : http://moddib.blogspot.fr/

  5. #5
    Membre habitué Avatar de Khrysby
    Homme Profil pro
    Chef de projet
    Inscrit en
    Avril 2005
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet

    Informations forums :
    Inscription : Avril 2005
    Messages : 239
    Points : 144
    Points
    144
    Par défaut
    Ca roule. Merci beaucoup pour ton aide !

    Juste, si t'as un petit tuto que tu aimes bien et que tu conseillerais ou un petit conseil perso à donner , je veux bien.

    Merci en tout cas.
    Mickaël

  6. #6
    Membre expert

    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Février 2006
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 1 031
    Points : 3 092
    Points
    3 092
    Par défaut
    Comme je n'ai pas de précision sur ce que tu souhaites faire je ne vais pas être bien original , je recommande les tutoriaux officiels :
    http://create.msdn.com/en-US/education/catalog/
    Suivez le développement de Chibis Bomba
    twitter : https://twitter.com/MoD_DiB
    DevBlog : http://moddib.blogspot.fr/

  7. #7
    Membre habitué Avatar de Khrysby
    Homme Profil pro
    Chef de projet
    Inscrit en
    Avril 2005
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet

    Informations forums :
    Inscription : Avril 2005
    Messages : 239
    Points : 144
    Points
    144
    Par défaut
    Merci .

    Pour l'instant je me lance dans la 2D. Je pense développé un jeux en 2D puis en 3D... Je ne sais pas trop encore.

    Je met en résolu.

    N'hésite pas si tu as d'autres idées .

    Merci encore.
    Mickaël

  8. #8
    Membre habitué Avatar de Khrysby
    Homme Profil pro
    Chef de projet
    Inscrit en
    Avril 2005
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet

    Informations forums :
    Inscription : Avril 2005
    Messages : 239
    Points : 144
    Points
    144
    Par défaut
    Dit moi,

    Est-ce que pour toi, cette exemple : http://create.msdn.com/en-US/educati...ample/spacewar

    Je peux me baser dessus (structure...) ?

    Merci d'avance pour ta réponse et bon weekend !
    Mickaël

  9. #9
    Membre expert

    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Février 2006
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 1 031
    Points : 3 092
    Points
    3 092
    Par défaut
    Il y a toujours des choses intéressantes à en tirer d'un sample aussi avancé, mais au niveau de l'architecture celui-ci est très moyen.
    Suivez le développement de Chibis Bomba
    twitter : https://twitter.com/MoD_DiB
    DevBlog : http://moddib.blogspot.fr/

  10. #10
    Membre habitué Avatar de Khrysby
    Homme Profil pro
    Chef de projet
    Inscrit en
    Avril 2005
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Chef de projet

    Informations forums :
    Inscription : Avril 2005
    Messages : 239
    Points : 144
    Points
    144
    Par défaut
    Ah mince...
    J'aimerai bien tombé sur un projet bien réalisé pour prendre exemple...

    Merci encore pour ton avis !
    Mickaël

  11. #11
    Membre actif
    Avatar de Mikmacer
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2006
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 116
    Points : 241
    Points
    241
    Par défaut
    Aucune des deux méthodes est bonne. La classe joueur reçoit trop de responsabilités, elle doit s'initialiser, se mettre à jour et se dessiner, ce sont tous des éléments qui devraient être découplés. Trop de responsabilité égal plus de couplage, le code devient difficile à maintenir et à réutiliser.

    Lorsque possible, il faut utiliser la composition et non l'héritage. Au lieu de dire le joueur est dessinable, il vaut mieux dire que le joueur contient un élément dessinable. Au lieu de dire que le joueur est un comportement, il vaut mieux dire que le joueur contient un comportement. C'est la manière de voir la composition.

    Le joueur ainsi que les entités devraient être composés de comportement, d'éléments dessinables, d'éléments physiques, etc.

    Exemple simple, si le joueur a de la vie, et qu'il commence à 10 points de vie. Au lieu de coder cette logique dans la classe joueur elle est codé dans une class "Health" paramètrable qui gère la vie, et le joueur est composé d'une instance de cette classe qui gère la vie. Ainsi, toutes les entités du jeu peuvent se composer de ce comportement. Les classes de comportement sont hyper spécialisées et plus facile à maintenir.

    On bâti les entités du jeu avec des comportements. Ça hévite le multi-héritage, et un graph d'héritage qui devient compliqué à visualiser et à gérer. Au final c'est plus facile à déboguer car les classes sont simples.

    Pour faire simple avec le joueur, il pourrait être une instance d'une classe générique Entity. Cette classe pourrait contenir une instance d'une classe Drawable(2D ou 3D) qui contient la fonction Draw. Elle pourrait contenir Load et Save aussi, mais en temps normal ces fonctions devraient être dans une classe spécialisée au IO. Ensuite elle pourrait contenir une classe "PlayerLogic" qui contient la logique du joueur et une fonction Update. Ensuite l'entité du joueur pourrait aussi contenir une classe PhysicAttributes qui contient les éléments de collisions du joueur.

    Pour avoir travaillé 2 ans et demi avec XNA, je dois dire que les exemples sur le site sont plus des exemples d'utilisation de XNA, que des bons exemples de design de jeux.

  12. #12
    Membre expert

    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Février 2006
    Messages
    1 031
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur de jeux vidéo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 1 031
    Points : 3 092
    Points
    3 092
    Par défaut
    Citation Envoyé par Mikmacer Voir le message
    je dois dire que les exemples sur le site sont plus des exemples d'utilisation de XNA, que des bons exemples de design de jeux.
    +1

    Si tu cherches un exemple plus sérieux regarde de ce côté :
    http://igf.codeplex.com/wikipage?tit...=Documentation
    Je ne suis pas fan de tous ses choix mais ce monsieur est quelqu'un de très organisé, en rendant son code plus data-driven il y a moyen d'avoir une archi sympathique.
    Suivez le développement de Chibis Bomba
    twitter : https://twitter.com/MoD_DiB
    DevBlog : http://moddib.blogspot.fr/

  13. #13
    Membre régulier
    Homme Profil pro
    médical
    Inscrit en
    Septembre 2007
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : médical

    Informations forums :
    Inscription : Septembre 2007
    Messages : 144
    Points : 71
    Points
    71
    Par défaut
    Citation Envoyé par Mikmacer Voir le message
    Aucune des deux méthodes est bonne. La classe joueur reçoit trop de responsabilités, elle doit s'initialiser, se mettre à jour et se dessiner, ce sont tous des éléments qui devraient être découplés. Trop de responsabilité égal plus de couplage, le code devient difficile à maintenir et à réutiliser.

    Lorsque possible, il faut utiliser la composition et non l'héritage. Au lieu de dire le joueur est dessinable, il vaut mieux dire que le joueur contient un élément dessinable. Au lieu de dire que le joueur est un comportement, il vaut mieux dire que le joueur contient un comportement. C'est la manière de voir la composition.

    Le joueur ainsi que les entités devraient être composés de comportement, d'éléments dessinables, d'éléments physiques, etc.

    Exemple simple, si le joueur a de la vie, et qu'il commence à 10 points de vie. Au lieu de coder cette logique dans la classe joueur elle est codé dans une class "Health" paramètrable qui gère la vie, et le joueur est composé d'une instance de cette classe qui gère la vie. Ainsi, toutes les entités du jeu peuvent se composer de ce comportement. Les classes de comportement sont hyper spécialisées et plus facile à maintenir.

    On bâti les entités du jeu avec des comportements. Ça hévite le multi-héritage, et un graph d'héritage qui devient compliqué à visualiser et à gérer. Au final c'est plus facile à déboguer car les classes sont simples.

    Pour faire simple avec le joueur, il pourrait être une instance d'une classe générique Entity. Cette classe pourrait contenir une instance d'une classe Drawable(2D ou 3D) qui contient la fonction Draw. Elle pourrait contenir Load et Save aussi, mais en temps normal ces fonctions devraient être dans une classe spécialisée au IO. Ensuite elle pourrait contenir une classe "PlayerLogic" qui contient la logique du joueur et une fonction Update. Ensuite l'entité du joueur pourrait aussi contenir une classe PhysicAttributes qui contient les éléments de collisions du joueur.

    Pour avoir travaillé 2 ans et demi avec XNA, je dois dire que les exemples sur le site sont plus des exemples d'utilisation de XNA, que des bons exemples de design de jeux.
    ouep, le concept est bien, le seul truc que je ne trouve pas beau, c'est quand le comportement doit interagir avec par exemple une texture du model qui contient ce comportement... il va falloir instancier le model dans ce comportement, en gros avoir A qui contient un instance de B et B de A... et je ne trouve pas ça super propre, donc si tu as uns solution propre à cela.... je suis preneur

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Programmer encore en VB 6 c'est pas bien ? Pourquoi ?
    Par Nektanebos dans le forum Débats sur le développement - Le Best Of
    Réponses: 85
    Dernier message: 10/03/2009, 14h43
  2. [Kylix] [cgi] ne trouve pas libsqlmy.so.1 !
    Par Nepomiachty Olivier dans le forum EDI
    Réponses: 3
    Dernier message: 04/07/2002, 15h15
  3. Réponses: 1
    Dernier message: 23/06/2002, 00h15
  4. Pas de fork sous Windows?
    Par chezjm dans le forum POSIX
    Réponses: 8
    Dernier message: 11/06/2002, 12h15

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