Précédent   Forum du club des développeurs et IT Pro > Applications > Développement 2D, 3D et Jeux > Moteurs de jeux vidéo > XNA
XNA Forum d'entraide sur le développement avec XNA
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 17/02/2012, 01h06   #1
Khrysby
Membre habitué
 
Avatar de Khrysby
 
Homme Mickael
Développeur informatique
Inscription : avril 2005
Messages : 239
Détails du profil
Informations personnelles :
Nom : Homme Mickael
Âge : 29
Localisation : France, Gard (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : avril 2005
Messages : 239
Points : 110
Points : 110
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
Khrysby est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2012, 09h31   #2
MoDDiB
Membre chevronné
 
Homme
Développeur de jeux vidéo
Inscription : février 2006
Messages : 451
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 : 451
Points : 698
Points : 698
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.
MoDDiB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2012, 09h43   #3
Khrysby
Membre habitué
 
Avatar de Khrysby
 
Homme Mickael
Développeur informatique
Inscription : avril 2005
Messages : 239
Détails du profil
Informations personnelles :
Nom : Homme Mickael
Âge : 29
Localisation : France, Gard (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : avril 2005
Messages : 239
Points : 110
Points : 110
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
Khrysby est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2012, 10h34   #4
MoDDiB
Membre chevronné
 
Homme
Développeur de jeux vidéo
Inscription : février 2006
Messages : 451
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 : 451
Points : 698
Points : 698
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.
MoDDiB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2012, 10h36   #5
Khrysby
Membre habitué
 
Avatar de Khrysby
 
Homme Mickael
Développeur informatique
Inscription : avril 2005
Messages : 239
Détails du profil
Informations personnelles :
Nom : Homme Mickael
Âge : 29
Localisation : France, Gard (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : avril 2005
Messages : 239
Points : 110
Points : 110
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
Khrysby est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2012, 11h37   #6
MoDDiB
Membre chevronné
 
Homme
Développeur de jeux vidéo
Inscription : février 2006
Messages : 451
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 : 451
Points : 698
Points : 698
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/
MoDDiB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2012, 11h40   #7
Khrysby
Membre habitué
 
Avatar de Khrysby
 
Homme Mickael
Développeur informatique
Inscription : avril 2005
Messages : 239
Détails du profil
Informations personnelles :
Nom : Homme Mickael
Âge : 29
Localisation : France, Gard (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : avril 2005
Messages : 239
Points : 110
Points : 110
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
Khrysby est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2012, 19h17   #8
Khrysby
Membre habitué
 
Avatar de Khrysby
 
Homme Mickael
Développeur informatique
Inscription : avril 2005
Messages : 239
Détails du profil
Informations personnelles :
Nom : Homme Mickael
Âge : 29
Localisation : France, Gard (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : avril 2005
Messages : 239
Points : 110
Points : 110
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
Khrysby est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/02/2012, 21h29   #9
MoDDiB
Membre chevronné
 
Homme
Développeur de jeux vidéo
Inscription : février 2006
Messages : 451
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 : 451
Points : 698
Points : 698
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.
MoDDiB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2012, 00h38   #10
Khrysby
Membre habitué
 
Avatar de Khrysby
 
Homme Mickael
Développeur informatique
Inscription : avril 2005
Messages : 239
Détails du profil
Informations personnelles :
Nom : Homme Mickael
Âge : 29
Localisation : France, Gard (Languedoc Roussillon)

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : avril 2005
Messages : 239
Points : 110
Points : 110
Ah mince...
J'aimerai bien tombé sur un projet bien réalisé pour prendre exemple...

Merci encore pour ton avis !
__________________
Mickaël
Khrysby est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/02/2012, 07h16   #11
Mikmacer
Membre confirmé
 
Avatar de Mikmacer
 
Homme
Étudiant
Inscription : mars 2006
Messages : 116
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 24
Localisation : Canada

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

Informations forums :
Inscription : mars 2006
Messages : 116
Points : 236
Points : 236
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.
Mikmacer est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 18/02/2012, 09h25   #12
MoDDiB
Membre chevronné
 
Homme
Développeur de jeux vidéo
Inscription : février 2006
Messages : 451
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 : 451
Points : 698
Points : 698
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.
MoDDiB est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/02/2012, 17h44   #13
dark poulpo
Nouveau Membre du Club
 
Homme
médical
Inscription : septembre 2007
Messages : 129
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Activité : médical

Informations forums :
Inscription : septembre 2007
Messages : 129
Points : 34
Points : 34
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
dark poulpo est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 01h26.


 
 
 
 
Partenaires

Hébergement Web