SlideShare une entreprise Scribd logo
1  sur  13
XNA – Aide scolaire<br />Par Sonny Brabez, pour les étudiants de SUPINFO.<br />Pour mieux comprendre comment mettre en place l’audio avec XNA, il y a un très bon tutorial en vidéo sur le site suivant : http://creators.xna.com/fr-FR/education/gettingstarted/bg3d/chapter8<br />Points étudiés dans ce document :<br />Mettre en place un projet Windows Game.<br />Comprendre la classe Game1 et les 5 méthodes utilisées par XNA : Initialize, LoadContent, UnloadContent, Update et Draw.<br />Mettre en place des textures 2D : mettre l’image souhaitée dans la solution, l’appeler et l’instancier dans LoadContent().<br />Savoir dessiner une texture 2D : utiliser un SpriteBatch dans la méthode Draw() et comprendre comment placer vos textures sur votre écran.<br />Mettre plusieurs textures et savoir gérer leurs superpositions : le premier sera celui le plus au fond, le dernier sera le plus proche.<br />Savoir mettre des valeurs de rectangles, de vecteurs par défaut dépendantes des textures : dans la méthode LoadContent().<br />Connaître la notion de sprite et comprendre comment gérer les Sprite Sheet : utilisation d’un rectangle source prenant la taille d’un sprite du sprite sheet, sachant que chaque sprite est séparé par une même largeur et hauteur.<br />Savoir utiliser la rotation (vecteur d’origine + angle de rotation), le scaling (zoom), les SpriteEffect (effet miroir) via le SpriteBatch.<br />Mettre en place des classes DrawableGameComponent et savoir les ajouter dans la classe Game1.<br />Permettre la gestion utilisateur (utilisation des manettes, du clavier, de la souris) : classes Keyboard, Mouse et GamePad.<br />Savoir gérer les collisions entre deux rectangles (méthode Intersects).<br />Utiliser XACT, l’outil de mise en place de musiques avec XNA.<br />Mettre en place la musique dans la solution en reprenant le .xap créé par XACT.<br />Mettre en place un projet Windows Game.<br />Il suffit de faire : File > New Project > Windows Game (2.0) OU (3.0).<br />Comprendre la classe Game1 et les 5 méthodes utilisées par XNA : Initialize, LoadContent, UnloadContent, Update et Draw.<br />A l’ouverture de votre projet, vous avez une classe nommée Game1 qui hérite de Game : celle-ci sera votre classe principale.<br />A vous de juger ce que vous mettez dedans. Néanmoins, vous y verrez 5 méthodes obligatoires :<br />Initialize() : permet d’initialiser des objets (hors texture  graphismes).<br />LoadContent() : permet d’initialiser tous les objets graphiques (textures).<br />UnloadContent() : permet de détruire les objets graphiques (méthode Dispose() sur les textures).<br />Update(GameTime gameTime) : permet de lancer en boucle les actions répétitives (genre le déplacement des personnages, ennemis etc). Prend en paramètre un GameTime : celui-ci permettant de gérer le temps.<br />Draw(GameTime gameTime) : permet de dessiner de manière répétitives chaque élément.<br />Mettre en place des textures 2D : mettre l’image souhaitée dans la solution, l’appeler et l’instancier dans LoadContent().<br />Pour mettre en place des images sur XNA, il faut tout d’abord les importer dans la solution. Pour cela, il suffit d’aller sur l’explorateur de solution (raccourci clavier : Ctrl+W puis S) et faire du glisser-déposer de vos images dans le dossier « Content ».<br />Remarquer « Content » avec un logo particulier.<br />Pour appeler une image, il faut d’abord la placer dans un objet. Le type d’objet utilisable pour ceci est Texture2D.<br />Pour instancier une texture 2D, il faut d’abord penser à la mettre dans la méthode LoadContent().<br />Ensuite il suffit de prépare sa texture 2D à accueilir le Content Pipeline ainsi :<br />Content.Load<Texture2D>(« nomDeVotreImage »)<br />ATTENTION : si vous aviez une image appelée alpha.png, il faudra marquer : Content.Load<Texture2D>(«alpha »). Il ne faut donc pas mettre le format de l’image à la fin !<br />Exemple :<br />Je prend une image nommée « backgrounds » qui est dans le dossier « Contentackground ».<br />Savoir dessiner une texture 2D : utiliser un SpriteBatch dans la méthode Draw().<br />Nous avons dorénavant mis en place une texture. Cependant celle-ci doit être dessinée. Pour cela, il faut utiliser un SpriteBatch, créé par défaut dans le LoadContent() en tant que spriteBatch.<br />S’il vous faut créer un SpriteBatch, penser que celui-ci prend en paramètre un GraphicDevice, disponible grâce au GraphicsDeviceManager. Par défaut, il s’agit de la variable graphics.<br />Le SpriteBatch doit être utilisé dans Draw() pour mettre en place un dessin.<br />Penser d’abord à démarrer le SpriteBatch dans Draw() avec : spriteBatch.Begin().<br />Penser ensuite à lui dire tout ce que vous voulez dessiner.<br />Et enfin pensez à l’arrêter : spriteBatch.End().<br />Supposons que nous voulons dessiner dans notre SpriteBatch, il faudra utiliser : spriteBatch.Draw(paramètres).<br />Il faut savoir qu’il existe plusieurs surcharges de la méthode faisant qu’elle utilise plusieurs paramètres. Voici une définition des paramètres possibles :<br />Texture2D : prend une texture.<br />Rectangle : prend un rectangle définissant un dessin de votre texture. Permet de dimensionner votre texture (et donc au préalable de l’aggrandir grâce à Width et Height) et de la placer sur votre écran. On va également préciser la position sur votre écran de la texture (via X et Y).<br />Vector2 : permet de mettre en place un vecteur (donc de gérer la position X/Y d’une texture). Il peut y en avoir deux dont 1 sert également à gérer la rotation (ce sera le vecteur d’origine).<br />Rectangle? : prend un rectangle source. Ceci est utilisé dans le cas des Sprite Sheet, pour séparer chaque sprite qui est à l’intérieur d’un Sprite Sheet.<br />Color : permet de définir une couleur à votre texture (Color.White permet de ne pas mettre de couleur particulière à votre texture).<br />float : Ici on peut en avoir 3 différents. Un sera pour l’angle de rotation en radian. Le second sera pour le zoom de votre texture (ATTENTION à bien toujours le mettre à 1 sinon votre texture ne sera jamais présente !). Le troisième sera pour la profondeur.<br />SpriteEffect : le SpriteEffect permet de faire un effet miroir de votre texture. FlipHorizontally fait l’effet miroir de gauche à droite.<br />Exemple avec mise en place d’une texture, d’un rectangle de dimension et d’une couleur :<br />Exemple avec mise en place d’une texture, d’un rectangle de base, d’un rectangle source (pour couper le sprite sheet) et d’une couleur :<br />Exemple avec mise en place d’une texture, d’un vecteur, d’un rectangle source, d’une couleur, d’une rotation, d’un vecteur d’origine,  d’un zoom, d’un SpriteEffect et d’une profondeur :<br />A savoir : En XNA, penser que votre écran de jeu a un axe abscisses (X)/ordonnées (Y) tel que le point d’origine (0,0) est en haut, à gauche.<br />Exemple :<br />Mettre plusieurs textures et savoir gérer leurs superpositions : le premier sera celui le plus au fond, le dernier sera le plus proche.<br />Dans le SpriteBatch, l’ordre est simple : le premier élément dessiné sera celui placé le plus au fond. C’est comme dans une peinture !<br />Ainsi le dernier élément placé sera donc le dernier à être dessiné.<br />Exemple :<br />Ici, si on prend le code dans le switch, case 1, le premier « hill » est placé dans notre écran PUIS le deuxième « hill2 » est placé faisant que « hill2 » sera AU DESSUS de « hill ».<br />A savoir : penser que quand vous ajoutez des composants DrawableGameComponent, ils se placeront selon leur ordre d’ajout donc le premier ajouté sera donc celui le plus au fond de votre écran !<br />Savoir mettre des valeurs de rectangles, de vecteurs par défaut dépendantes des textures : dans la méthode LoadContent().<br />Vous aurez remarqué que pour nos Draw dans le SpriteBatch, nous avons souvent besoin de vecteurs ou de rectangles.<br />Si on veut que ces vecteurs ou rectangles prennent des valeurs reprises de la texture, il est nécessaire de les placer là où on initialise la texture c'est-à-dire le LoadContent().<br />En effet, les placer dans Update() ou Draw() serait un très mauvais choix car ceux-ci sont systématiquement relancés (contrairement à LoadContent()).<br />Voici un exemple :<br />Ici on voit que je donne à mon vecteur marioMovements une hauteur qui DEPEND de ma texture, d’où la nécessité de faire mon instance de vecteur dans le LoadContent().<br />Connaître la notion de sprite et comprendre comment gérer les Sprite Sheet : utilisation d’un rectangle source prenant la taille d’un sprite du sprite sheet, sachant que chaque sprite est séparé par une même largeur et hauteur.<br />Le sprite est en fait un simple personnage qui possède un unique mouvement.<br />Un sprite sheet est simplement composé de plusieurs sprites permettant de donner une dynamique de mouvements (car un sprite = un mouvement) et donc par exemple de faire qu’un personnage puisse courir, sauter, tomber etc.<br />Pour mettre en place un sprite sheet, il est essentiel d’avoir une largeur et hauteur égales entre chaque sprite de ce sprite sheet.<br />Exemple de Sprite Sheet :<br />Ici Mario a 4 sprites dont chaque sprite a une largeur de 16 et une hauteur de 27. Le total de sa largeur (c'est-à-dire les 4 sprites réunis) est également à noter : 64.<br />Pour mettre en place une solution avec Sprite Sheet, il est essentiel d’instancier un Rectangle qui commencera au début du sprite sheet (ici le début du sprite sheet est à X = 0 et Y = 0) et qui aura pour largeur celle d’UN SPRITE (16 ici) et la longueur d’UN SPRITE.<br />Ensuite, il faudra penser à glisser entre chaque sprite en ajoutant à chaque fois à l’abscisse du rectangle (X), la largeur d’un sprite. <br />Pour revenir à la case départ, penser à faire un modulo sur l’abscisse du rectangle (X) en utilisant la largeur totale de notre sprite sheet (ici 64).<br />Exemple d’instance :<br />Le rectangle nommé marioSheet est mon instance, contenant uniquement une largeur de 16 et une hauteur de 27, c'est-à-dire : un sprite de notre sprite sheet. La texture « Characters/mariobrosdroite » est un sprite sheet. Le vecteur va permettre de bouger la texture par rapport à l’écran alors que le rectangle va permettre de glisser la texture vers un autre sprite.<br />Exemple de glissage :<br />Ici dans Update(), j’ai décidé d’avancer Mario en gérant à la fois son vecteur (qui avance sa texture) et son rectangle (qui avance son sprite sheet). La partie du sprite sheet est à l’intérieur du compteur : j’ajoute 16 à l’abscisse de mon rectangle et je module à 64, la totalité de l’image<br />Savoir utiliser la rotation (vecteur d’origine + angle de rotation), le scaling (zoom), les SpriteEffect (effet miroir) via le SpriteBatch.<br />Pour pouvoir utiliser rotation, zoom, SpriteEffect, il faut d’abord les utiliser dans les Draw() du SpriteBatch.<br />Une rotation va permettre de changer d’angle votre texture mais pour cela il est nécessaire de prévoir un vecteur d’origine puis un angle.<br />L’angle peut se faire via l’aide de la classe MathHelper (et ses propriétés Pi).<br />Un zoom s’utilise simplement avec des nombres flottants ( ne pas oublier le f après le chiffre quand on gère des nombres flottants). Attention à ne pas l’avoir à zéro, sinon plus rien ne s’affiche.<br />Un SpriteEffect est une énumération permettant de tourner votre texture dans le sens d’un miroir (donc une symétrie par rapport à un axe). Attention à ne pas confondre avec la rotation.<br />Mettre en place des classes DrawableGameComponent et savoir les ajouter dans la classe Game1.<br />Une classe DrawableGameComponent permet de créer des classes entières pour un élément au lieu de tout faire au niveau de Game1.<br />Pour la créer, il faut d’abord mettre en place un GameComponent puis changer l’héritage par DrawableGameComponent.<br />Exemple :<br />Avant, j’avais juste GameComponent et je l’ai remplacé par DrawableGameComponent.<br />Penser à bien remettre toutes les méthodes en écrivant « override » et vous aurez une petite bulle où vous pouvez choisir les méthodes à redéfinir. Logiquement il faut remettre : LoadContent(), UnloadContent() et Draw(GameTime gameTime).<br />Il suffit ensuite de faire comme dans la classe Game1.<br />Pour associer à Game1 nos DrawableGameComponent, vous aurez remarqué que dans le constructeur du DrawableGameComponent j’ai un constructeur prenant un Game. C’est par cela qu’on pourra gérer la liaison entre les deux classes.<br />Dans Game1, il faudra juste ajouter : Components.Add(DrawableGameComponent).<br />Exemple :<br />J’ai ajouté un Drawable Mario, que j’ai instancié en fonction de la classe Game1 (via this) puis je l’ai ajouté en tant que composant.<br />Dans DrawableGameComponent, pour reprendre les éléments de notre Game1 (attention à penser à mettre quelques éléments en public : en autre le GraphicsDeviceManager), il suffit de faire un cast : ((Game1)Game)<br />Autre méthode possible en exemple :<br />Ici, ma classe Game1 (que j’ai renommé MarioGame), j’en crée un objet que j’instancie avec le Game game présent dans le constructeur de mon DrawableGameComponent.<br />Permettre la gestion utilisateur (utilisation des manettes, du clavier, de la souris) : classes Keyboard, Mouse et GamePad.<br />Pour qu’un utilisateur puisse jouer, il doit pouvoir contrôler au moins 1 texture. Pour cela, il y a présence de classes telles que Keyboard, Mouse et GamePad.<br />ATTENTION : il est inutile de les instancier… leurs méthodes sont statiques et donc disponible à partir de la classe.<br />Il faut penser à gérer ces événements dans Update().<br />Exemple :<br />Ici si j’appuie sur Haut (IsKeyDown(Keys.Up)), ma texture va perdre 30 en ordonnée (elle va donc monter sur mon écran ).<br />Penser qu’on peut gérer quand aucune touche n’est appuyée de la manière suivante :<br />Savoir gérer les collisions entre deux rectangles (méthode Intersects).<br />Pour la gestion des collisions, il faut penser à mettre en place au moins deux rectangles.<br />Pour gérer la collision il suffit de faire : rectangleA.Intersects(rectangleB).<br />Ce résultat envoie un booléen précisant s’il y a collision.<br />A savoir : je vous recommande de créer des méthodes dans vos Drawable et ensuite de les appeler dans la classe Game1.<br />Exemple :<br />Dans mon Drawable, je renvois un rectangle de mon Mario auquel je mets à jour son mouvement (très important !).<br />Même chose pour mon Goomba (un ennemi).<br />Ici dans mon Update de Game1, je dis que si Mario est en collision avec Goomba alors selon si Mario saute ou non, je dispose soit Goomba soit Mario.<br />Utiliser XACT, l’outil de mise en place de musiques avec XNA.<br />Pour pouvoir gérer les sons/musiques sur XNA, il faut lancer XACT. Pour cela, il faut aller chercher ici (si vous avez la version 3 de XNA, logiquement c’est pareil pour la version 2) : C:rogram Filesicrosoft XNANA Game Studio3.0ools <br />Ouvrer : Xact.exe (et AudConsole.exe si vous voulez pouvoir écouter les sons ajoutés).<br />Dedans, il est nécessaire de créer un nouvel élément en allant sur File > New Project.<br />Ensuite, penser à renommer votre projet AVANT enregistrement, sinon ce sera trop tard ! (Le nom est important)<br />Ajouter une Wave Bank et faites clique droit « Insert Wave File(s) » et prenez toutes vos musiques en .WAV ou .AIFF. (nommer bien votre Wave Bank). A savoir : le choix multiple est possible.<br />Ajouter ensuite une Sound Bank. Faites glisser déposer les éléments de votre Wave Bank dans la partie Cue de votre Sound Bank. Nommer bien votre Sound Bank.<br />Enregistrer tout et c’est fini avec XACT.<br />Résultat possible :<br />Mettre en place la musique dans la solution en reprenant le .xap créé par XACT.<br />Pour mettre la musique dans votre jeu, n’oubliez pas les étapes suivantes :<br />Dans le dossier « Content » de notre solution (via Solution Explorer), insérer le fichier .xap créé par XACT.<br />Via Windows, aller dans le dossier de votre solution, dans le dossier « Content » et ajouter TOUT les Wav pour qu’ils soient retrouvés.  JE VOUS PREVIENS QUE JE NE SUIS PAS SUR DE CELA… MAIS JE N’ARRIVE PAS A FAIRE FONCTIONNER AUTREMENT…<br />Dans votre solution, instancier trois éléments :<br />AudioEngine, WaveBank et SoundBank.<br />Finir par jouer une musique grâce au SoundBank et la méthode PlayCue attendant le nom d’une musique (Cue Name).<br />Ne pas oublier de mettre à jour le AudioEngine via sa méthode Update.<br />Exemple :<br />ATTENTION : L’AudioEngine prend un .xgs dont le nom sera celui du .xap. Le WaveBank prend le nom du wave bank créé dans XACT et a pour extension .xwb. De même niveau SoundBank sauf que c’est une extension .xsb.<br />
XNA - Aide Scolaire - 2009 - FR
XNA - Aide Scolaire - 2009 - FR
XNA - Aide Scolaire - 2009 - FR
XNA - Aide Scolaire - 2009 - FR
XNA - Aide Scolaire - 2009 - FR
XNA - Aide Scolaire - 2009 - FR
XNA - Aide Scolaire - 2009 - FR
XNA - Aide Scolaire - 2009 - FR
XNA - Aide Scolaire - 2009 - FR
XNA - Aide Scolaire - 2009 - FR
XNA - Aide Scolaire - 2009 - FR
XNA - Aide Scolaire - 2009 - FR

Contenu connexe

Tendances

TP / Traitement d'image : Discrimination de Texture
TP / Traitement d'image : Discrimination de TextureTP / Traitement d'image : Discrimination de Texture
TP / Traitement d'image : Discrimination de TextureAhmed EL ATARI
 
Tutoriel pour dresser une courbe de lumière d'un transit d'exoplanète avec Ir...
Tutoriel pour dresser une courbe de lumière d'un transit d'exoplanète avec Ir...Tutoriel pour dresser une courbe de lumière d'un transit d'exoplanète avec Ir...
Tutoriel pour dresser une courbe de lumière d'un transit d'exoplanète avec Ir...Didier Walliang
 
Incubateur Toulousain - Introduction au XNA - Damien Paludetto (26/01/2011)
Incubateur Toulousain - Introduction au XNA - Damien Paludetto (26/01/2011)Incubateur Toulousain - Introduction au XNA - Damien Paludetto (26/01/2011)
Incubateur Toulousain - Introduction au XNA - Damien Paludetto (26/01/2011)lincubateur_tls
 
Rapport - Création d'une image panoramique
Rapport - Création d'une image panoramiqueRapport - Création d'une image panoramique
Rapport - Création d'une image panoramiqueAhmed EL ATARI
 
Tutoriel photofiltre par F. BELLET
Tutoriel photofiltre par F. BELLETTutoriel photofiltre par F. BELLET
Tutoriel photofiltre par F. BELLETfredbellet
 
Magazine face pro 32
Magazine face pro 32Magazine face pro 32
Magazine face pro 32Slah DRISS
 
Généralisation Cartographique
Généralisation CartographiqueGénéralisation Cartographique
Généralisation CartographiqueAhmed EL ATARI
 
Td2 decrypted
Td2 decryptedTd2 decrypted
Td2 decryptedMed Mmed
 

Tendances (10)

TP / Traitement d'image : Discrimination de Texture
TP / Traitement d'image : Discrimination de TextureTP / Traitement d'image : Discrimination de Texture
TP / Traitement d'image : Discrimination de Texture
 
Initiation à Flash
Initiation à FlashInitiation à Flash
Initiation à Flash
 
Tutoriel pour dresser une courbe de lumière d'un transit d'exoplanète avec Ir...
Tutoriel pour dresser une courbe de lumière d'un transit d'exoplanète avec Ir...Tutoriel pour dresser une courbe de lumière d'un transit d'exoplanète avec Ir...
Tutoriel pour dresser une courbe de lumière d'un transit d'exoplanète avec Ir...
 
Incubateur Toulousain - Introduction au XNA - Damien Paludetto (26/01/2011)
Incubateur Toulousain - Introduction au XNA - Damien Paludetto (26/01/2011)Incubateur Toulousain - Introduction au XNA - Damien Paludetto (26/01/2011)
Incubateur Toulousain - Introduction au XNA - Damien Paludetto (26/01/2011)
 
Rapport - Création d'une image panoramique
Rapport - Création d'une image panoramiqueRapport - Création d'une image panoramique
Rapport - Création d'une image panoramique
 
Tutoriel photofiltre par F. BELLET
Tutoriel photofiltre par F. BELLETTutoriel photofiltre par F. BELLET
Tutoriel photofiltre par F. BELLET
 
QQCOQP-Document_animateur_Tome2
QQCOQP-Document_animateur_Tome2QQCOQP-Document_animateur_Tome2
QQCOQP-Document_animateur_Tome2
 
Magazine face pro 32
Magazine face pro 32Magazine face pro 32
Magazine face pro 32
 
Généralisation Cartographique
Généralisation CartographiqueGénéralisation Cartographique
Généralisation Cartographique
 
Td2 decrypted
Td2 decryptedTd2 decrypted
Td2 decrypted
 

En vedette

Ciencias del deporte
Ciencias del deporteCiencias del deporte
Ciencias del deporteAlejo Gaviria
 
Java uik-chap2-dev java
Java uik-chap2-dev javaJava uik-chap2-dev java
Java uik-chap2-dev javaAmel Morchdi
 
se prémunir des litiges liés à l' Ecommerce
se prémunir des litiges liés à l' Ecommercese prémunir des litiges liés à l' Ecommerce
se prémunir des litiges liés à l' Ecommercesdistasi
 
Recrutement innovant marque employeur et réseaux sociaux - mars 2014
Recrutement innovant   marque employeur et réseaux sociaux - mars 2014Recrutement innovant   marque employeur et réseaux sociaux - mars 2014
Recrutement innovant marque employeur et réseaux sociaux - mars 2014Sabrina Xenofontos
 
Russie 3 villes moscou st petersburg & petrodvorec11
Russie 3 villes moscou st petersburg & petrodvorec11Russie 3 villes moscou st petersburg & petrodvorec11
Russie 3 villes moscou st petersburg & petrodvorec11filipj2000
 
Tarea seminario vii estadística y ti cs
Tarea seminario vii estadística y ti csTarea seminario vii estadística y ti cs
Tarea seminario vii estadística y ti csCristina de Vega
 
Papillons et minéraux_rp
Papillons et minéraux_rpPapillons et minéraux_rp
Papillons et minéraux_rpfilipj2000
 
Les_sens_une_pure_merveille
Les_sens_une_pure_merveilleLes_sens_une_pure_merveille
Les_sens_une_pure_merveilleourbothy
 
Quand ils vont_s_en_apercevoir
Quand ils vont_s_en_apercevoirQuand ils vont_s_en_apercevoir
Quand ils vont_s_en_apercevoirourbothy
 
La technologie au service de la mobilité
La technologie au service de la mobilitéLa technologie au service de la mobilité
La technologie au service de la mobilitésdistasi
 
Focus sur la gouvernance d'entreprise à Ecobank sous Thierry Tanoh (2012-2014)
Focus sur la gouvernance d'entreprise à Ecobank sous Thierry Tanoh (2012-2014)Focus sur la gouvernance d'entreprise à Ecobank sous Thierry Tanoh (2012-2014)
Focus sur la gouvernance d'entreprise à Ecobank sous Thierry Tanoh (2012-2014)Charles Adechola D'ALMEIDA
 
Sculpturesnaturelles
SculpturesnaturellesSculpturesnaturelles
Sculpturesnaturelleskenny89320
 

En vedette (20)

NORMAS APA VS NORMAS ICONTEC
NORMAS APA VS NORMAS ICONTECNORMAS APA VS NORMAS ICONTEC
NORMAS APA VS NORMAS ICONTEC
 
Synthese paroles 21juin2011
Synthese paroles 21juin2011Synthese paroles 21juin2011
Synthese paroles 21juin2011
 
Valle inclan
Valle inclan Valle inclan
Valle inclan
 
Ciencias del deporte
Ciencias del deporteCiencias del deporte
Ciencias del deporte
 
Camilo josé
Camilo josé Camilo josé
Camilo josé
 
En ou dans?
En ou dans?En ou dans?
En ou dans?
 
Java uik-chap2-dev java
Java uik-chap2-dev javaJava uik-chap2-dev java
Java uik-chap2-dev java
 
Cosas a tener en cuenta en adicciones
Cosas a tener en cuenta en adiccionesCosas a tener en cuenta en adicciones
Cosas a tener en cuenta en adicciones
 
se prémunir des litiges liés à l' Ecommerce
se prémunir des litiges liés à l' Ecommercese prémunir des litiges liés à l' Ecommerce
se prémunir des litiges liés à l' Ecommerce
 
Recrutement innovant marque employeur et réseaux sociaux - mars 2014
Recrutement innovant   marque employeur et réseaux sociaux - mars 2014Recrutement innovant   marque employeur et réseaux sociaux - mars 2014
Recrutement innovant marque employeur et réseaux sociaux - mars 2014
 
Russie 3 villes moscou st petersburg & petrodvorec11
Russie 3 villes moscou st petersburg & petrodvorec11Russie 3 villes moscou st petersburg & petrodvorec11
Russie 3 villes moscou st petersburg & petrodvorec11
 
Tarea seminario vii estadística y ti cs
Tarea seminario vii estadística y ti csTarea seminario vii estadística y ti cs
Tarea seminario vii estadística y ti cs
 
Papillons et minéraux_rp
Papillons et minéraux_rpPapillons et minéraux_rp
Papillons et minéraux_rp
 
Les_sens_une_pure_merveille
Les_sens_une_pure_merveilleLes_sens_une_pure_merveille
Les_sens_une_pure_merveille
 
Quand ils vont_s_en_apercevoir
Quand ils vont_s_en_apercevoirQuand ils vont_s_en_apercevoir
Quand ils vont_s_en_apercevoir
 
La technologie au service de la mobilité
La technologie au service de la mobilitéLa technologie au service de la mobilité
La technologie au service de la mobilité
 
Focus sur la gouvernance d'entreprise à Ecobank sous Thierry Tanoh (2012-2014)
Focus sur la gouvernance d'entreprise à Ecobank sous Thierry Tanoh (2012-2014)Focus sur la gouvernance d'entreprise à Ecobank sous Thierry Tanoh (2012-2014)
Focus sur la gouvernance d'entreprise à Ecobank sous Thierry Tanoh (2012-2014)
 
Ctystade avis
Ctystade avisCtystade avis
Ctystade avis
 
Cationes quimica
Cationes quimicaCationes quimica
Cationes quimica
 
Sculpturesnaturelles
SculpturesnaturellesSculpturesnaturelles
Sculpturesnaturelles
 

Similaire à XNA - Aide Scolaire - 2009 - FR

Synthèse gimp
Synthèse gimpSynthèse gimp
Synthèse gimpspelat
 
powerpoint_initiation.ppt
powerpoint_initiation.pptpowerpoint_initiation.ppt
powerpoint_initiation.pptMohammedTaib5
 
Traitement d'image sous Matlab
Traitement d'image sous Matlab  Traitement d'image sous Matlab
Traitement d'image sous Matlab Hajer Dahech
 
Diapo Impress
Diapo ImpressDiapo Impress
Diapo Impressljvdb
 
Comment créer un effet de texte avec une ombre longue sur Illustrator ?
Comment créer un effet de texte avec une ombre longue sur Illustrator ?Comment créer un effet de texte avec une ombre longue sur Illustrator ?
Comment créer un effet de texte avec une ombre longue sur Illustrator ?Votre Assistante
 
Présentation : Projet de Fin d'etude ' PFE ' 2018 : Conception et Réalisation...
Présentation : Projet de Fin d'etude ' PFE ' 2018 : Conception et Réalisation...Présentation : Projet de Fin d'etude ' PFE ' 2018 : Conception et Réalisation...
Présentation : Projet de Fin d'etude ' PFE ' 2018 : Conception et Réalisation...Achraf Frouja
 
Synthèse gimp
Synthèse gimpSynthèse gimp
Synthèse gimpspelat
 
Godot Engine, le guide de démarrage du débutant
Godot Engine, le guide de démarrage du débutantGodot Engine, le guide de démarrage du débutant
Godot Engine, le guide de démarrage du débutantAntho Cardinale
 
Cours adobe photoshop cs v8.0-fr - conseils et astuces dexperts
Cours   adobe photoshop cs v8.0-fr - conseils et astuces dexpertsCours   adobe photoshop cs v8.0-fr - conseils et astuces dexperts
Cours adobe photoshop cs v8.0-fr - conseils et astuces dexpertsMohamed Nouri
 
Android Lab Test : Ecrire un texte sur le canevas (français)
Android Lab Test : Ecrire un texte sur le canevas (français)Android Lab Test : Ecrire un texte sur le canevas (français)
Android Lab Test : Ecrire un texte sur le canevas (français)Bruno Delb
 
Support tutoriel : Créer votre jeu en HTML5
Support tutoriel : Créer votre jeu en HTML5Support tutoriel : Créer votre jeu en HTML5
Support tutoriel : Créer votre jeu en HTML5SmartnSkilled
 
Scratch 2.0 offline
Scratch 2.0 offlineScratch 2.0 offline
Scratch 2.0 offlinenabildekess
 
Tutorial java swing
Tutorial java swingTutorial java swing
Tutorial java swingNataraj Dg
 

Similaire à XNA - Aide Scolaire - 2009 - FR (20)

Tutoriel_SCRATCH_Document-Navigateur_V1
Tutoriel_SCRATCH_Document-Navigateur_V1Tutoriel_SCRATCH_Document-Navigateur_V1
Tutoriel_SCRATCH_Document-Navigateur_V1
 
Synthèse gimp
Synthèse gimpSynthèse gimp
Synthèse gimp
 
22222.pptx
22222.pptx22222.pptx
22222.pptx
 
INITIATION.pptx
INITIATION.pptxINITIATION.pptx
INITIATION.pptx
 
Diapo impress
Diapo impressDiapo impress
Diapo impress
 
powerpoint_initiation.ppt
powerpoint_initiation.pptpowerpoint_initiation.ppt
powerpoint_initiation.ppt
 
powerpoint_initiation.ppt
powerpoint_initiation.pptpowerpoint_initiation.ppt
powerpoint_initiation.ppt
 
powerpoint_initiation.ppt
powerpoint_initiation.pptpowerpoint_initiation.ppt
powerpoint_initiation.ppt
 
Traitement d'image sous Matlab
Traitement d'image sous Matlab  Traitement d'image sous Matlab
Traitement d'image sous Matlab
 
Diapo Impress
Diapo ImpressDiapo Impress
Diapo Impress
 
Comment créer un effet de texte avec une ombre longue sur Illustrator ?
Comment créer un effet de texte avec une ombre longue sur Illustrator ?Comment créer un effet de texte avec une ombre longue sur Illustrator ?
Comment créer un effet de texte avec une ombre longue sur Illustrator ?
 
Présentation : Projet de Fin d'etude ' PFE ' 2018 : Conception et Réalisation...
Présentation : Projet de Fin d'etude ' PFE ' 2018 : Conception et Réalisation...Présentation : Projet de Fin d'etude ' PFE ' 2018 : Conception et Réalisation...
Présentation : Projet de Fin d'etude ' PFE ' 2018 : Conception et Réalisation...
 
Synthèse gimp
Synthèse gimpSynthèse gimp
Synthèse gimp
 
Godot Engine, le guide de démarrage du débutant
Godot Engine, le guide de démarrage du débutantGodot Engine, le guide de démarrage du débutant
Godot Engine, le guide de démarrage du débutant
 
Cours adobe photoshop cs v8.0-fr - conseils et astuces dexperts
Cours   adobe photoshop cs v8.0-fr - conseils et astuces dexpertsCours   adobe photoshop cs v8.0-fr - conseils et astuces dexperts
Cours adobe photoshop cs v8.0-fr - conseils et astuces dexperts
 
Android Lab Test : Ecrire un texte sur le canevas (français)
Android Lab Test : Ecrire un texte sur le canevas (français)Android Lab Test : Ecrire un texte sur le canevas (français)
Android Lab Test : Ecrire un texte sur le canevas (français)
 
Support tutoriel : Créer votre jeu en HTML5
Support tutoriel : Créer votre jeu en HTML5Support tutoriel : Créer votre jeu en HTML5
Support tutoriel : Créer votre jeu en HTML5
 
Scratch 2.0 offline
Scratch 2.0 offlineScratch 2.0 offline
Scratch 2.0 offline
 
Tutorial java swing
Tutorial java swingTutorial java swing
Tutorial java swing
 
Tuto impress2
Tuto impress2Tuto impress2
Tuto impress2
 

Plus de Sonny Brabez

EAI/ERP - Petit cours sur le principe du EAI/ERP, Microsoft BizTalk 2006 & Mi...
EAI/ERP - Petit cours sur le principe du EAI/ERP, Microsoft BizTalk 2006 & Mi...EAI/ERP - Petit cours sur le principe du EAI/ERP, Microsoft BizTalk 2006 & Mi...
EAI/ERP - Petit cours sur le principe du EAI/ERP, Microsoft BizTalk 2006 & Mi...Sonny Brabez
 
SaaS Studies - SaaS Directories
SaaS Studies - SaaS DirectoriesSaaS Studies - SaaS Directories
SaaS Studies - SaaS DirectoriesSonny Brabez
 
IT Management - Analyzing BI and ERP - EN
IT Management - Analyzing BI and ERP - ENIT Management - Analyzing BI and ERP - EN
IT Management - Analyzing BI and ERP - ENSonny Brabez
 
ABFE - Specification Template Document (Imagine Cup 2009)
ABFE - Specification Template Document (Imagine Cup 2009)ABFE - Specification Template Document (Imagine Cup 2009)
ABFE - Specification Template Document (Imagine Cup 2009)Sonny Brabez
 
A Breath From Earth - Game Summary (Imagine Cup 2009)
A Breath From Earth - Game Summary (Imagine Cup 2009)A Breath From Earth - Game Summary (Imagine Cup 2009)
A Breath From Earth - Game Summary (Imagine Cup 2009)Sonny Brabez
 
Thesis Defense - Improving a dashboard efficiency - 2010 - EN
Thesis Defense - Improving a dashboard efficiency - 2010 - ENThesis Defense - Improving a dashboard efficiency - 2010 - EN
Thesis Defense - Improving a dashboard efficiency - 2010 - ENSonny Brabez
 
Chicago (Group schoolwork project)
Chicago (Group schoolwork project)Chicago (Group schoolwork project)
Chicago (Group schoolwork project)Sonny Brabez
 
JavaEE 5 - Exercise - 2009 - FR
JavaEE 5 - Exercise - 2009 - FRJavaEE 5 - Exercise - 2009 - FR
JavaEE 5 - Exercise - 2009 - FRSonny Brabez
 
SOLARIS 10 - Exercise - FR - 2008
SOLARIS 10 - Exercise - FR - 2008SOLARIS 10 - Exercise - FR - 2008
SOLARIS 10 - Exercise - FR - 2008Sonny Brabez
 
A Breath From Earth - Gameplay Instructions (Imagine Cup 2009)
A Breath From Earth - Gameplay Instructions (Imagine Cup 2009)A Breath From Earth - Gameplay Instructions (Imagine Cup 2009)
A Breath From Earth - Gameplay Instructions (Imagine Cup 2009)Sonny Brabez
 
Presenting Oldies [Video game] (Schoolwork presentation)
Presenting Oldies [Video game] (Schoolwork presentation)Presenting Oldies [Video game] (Schoolwork presentation)
Presenting Oldies [Video game] (Schoolwork presentation)Sonny Brabez
 
Presenting LucasArts (Schoolwork presentation)
Presenting LucasArts (Schoolwork presentation)Presenting LucasArts (Schoolwork presentation)
Presenting LucasArts (Schoolwork presentation)Sonny Brabez
 

Plus de Sonny Brabez (12)

EAI/ERP - Petit cours sur le principe du EAI/ERP, Microsoft BizTalk 2006 & Mi...
EAI/ERP - Petit cours sur le principe du EAI/ERP, Microsoft BizTalk 2006 & Mi...EAI/ERP - Petit cours sur le principe du EAI/ERP, Microsoft BizTalk 2006 & Mi...
EAI/ERP - Petit cours sur le principe du EAI/ERP, Microsoft BizTalk 2006 & Mi...
 
SaaS Studies - SaaS Directories
SaaS Studies - SaaS DirectoriesSaaS Studies - SaaS Directories
SaaS Studies - SaaS Directories
 
IT Management - Analyzing BI and ERP - EN
IT Management - Analyzing BI and ERP - ENIT Management - Analyzing BI and ERP - EN
IT Management - Analyzing BI and ERP - EN
 
ABFE - Specification Template Document (Imagine Cup 2009)
ABFE - Specification Template Document (Imagine Cup 2009)ABFE - Specification Template Document (Imagine Cup 2009)
ABFE - Specification Template Document (Imagine Cup 2009)
 
A Breath From Earth - Game Summary (Imagine Cup 2009)
A Breath From Earth - Game Summary (Imagine Cup 2009)A Breath From Earth - Game Summary (Imagine Cup 2009)
A Breath From Earth - Game Summary (Imagine Cup 2009)
 
Thesis Defense - Improving a dashboard efficiency - 2010 - EN
Thesis Defense - Improving a dashboard efficiency - 2010 - ENThesis Defense - Improving a dashboard efficiency - 2010 - EN
Thesis Defense - Improving a dashboard efficiency - 2010 - EN
 
Chicago (Group schoolwork project)
Chicago (Group schoolwork project)Chicago (Group schoolwork project)
Chicago (Group schoolwork project)
 
JavaEE 5 - Exercise - 2009 - FR
JavaEE 5 - Exercise - 2009 - FRJavaEE 5 - Exercise - 2009 - FR
JavaEE 5 - Exercise - 2009 - FR
 
SOLARIS 10 - Exercise - FR - 2008
SOLARIS 10 - Exercise - FR - 2008SOLARIS 10 - Exercise - FR - 2008
SOLARIS 10 - Exercise - FR - 2008
 
A Breath From Earth - Gameplay Instructions (Imagine Cup 2009)
A Breath From Earth - Gameplay Instructions (Imagine Cup 2009)A Breath From Earth - Gameplay Instructions (Imagine Cup 2009)
A Breath From Earth - Gameplay Instructions (Imagine Cup 2009)
 
Presenting Oldies [Video game] (Schoolwork presentation)
Presenting Oldies [Video game] (Schoolwork presentation)Presenting Oldies [Video game] (Schoolwork presentation)
Presenting Oldies [Video game] (Schoolwork presentation)
 
Presenting LucasArts (Schoolwork presentation)
Presenting LucasArts (Schoolwork presentation)Presenting LucasArts (Schoolwork presentation)
Presenting LucasArts (Schoolwork presentation)
 

XNA - Aide Scolaire - 2009 - FR

  • 1. XNA – Aide scolaire<br />Par Sonny Brabez, pour les étudiants de SUPINFO.<br />Pour mieux comprendre comment mettre en place l’audio avec XNA, il y a un très bon tutorial en vidéo sur le site suivant : http://creators.xna.com/fr-FR/education/gettingstarted/bg3d/chapter8<br />Points étudiés dans ce document :<br />Mettre en place un projet Windows Game.<br />Comprendre la classe Game1 et les 5 méthodes utilisées par XNA : Initialize, LoadContent, UnloadContent, Update et Draw.<br />Mettre en place des textures 2D : mettre l’image souhaitée dans la solution, l’appeler et l’instancier dans LoadContent().<br />Savoir dessiner une texture 2D : utiliser un SpriteBatch dans la méthode Draw() et comprendre comment placer vos textures sur votre écran.<br />Mettre plusieurs textures et savoir gérer leurs superpositions : le premier sera celui le plus au fond, le dernier sera le plus proche.<br />Savoir mettre des valeurs de rectangles, de vecteurs par défaut dépendantes des textures : dans la méthode LoadContent().<br />Connaître la notion de sprite et comprendre comment gérer les Sprite Sheet : utilisation d’un rectangle source prenant la taille d’un sprite du sprite sheet, sachant que chaque sprite est séparé par une même largeur et hauteur.<br />Savoir utiliser la rotation (vecteur d’origine + angle de rotation), le scaling (zoom), les SpriteEffect (effet miroir) via le SpriteBatch.<br />Mettre en place des classes DrawableGameComponent et savoir les ajouter dans la classe Game1.<br />Permettre la gestion utilisateur (utilisation des manettes, du clavier, de la souris) : classes Keyboard, Mouse et GamePad.<br />Savoir gérer les collisions entre deux rectangles (méthode Intersects).<br />Utiliser XACT, l’outil de mise en place de musiques avec XNA.<br />Mettre en place la musique dans la solution en reprenant le .xap créé par XACT.<br />Mettre en place un projet Windows Game.<br />Il suffit de faire : File > New Project > Windows Game (2.0) OU (3.0).<br />Comprendre la classe Game1 et les 5 méthodes utilisées par XNA : Initialize, LoadContent, UnloadContent, Update et Draw.<br />A l’ouverture de votre projet, vous avez une classe nommée Game1 qui hérite de Game : celle-ci sera votre classe principale.<br />A vous de juger ce que vous mettez dedans. Néanmoins, vous y verrez 5 méthodes obligatoires :<br />Initialize() : permet d’initialiser des objets (hors texture  graphismes).<br />LoadContent() : permet d’initialiser tous les objets graphiques (textures).<br />UnloadContent() : permet de détruire les objets graphiques (méthode Dispose() sur les textures).<br />Update(GameTime gameTime) : permet de lancer en boucle les actions répétitives (genre le déplacement des personnages, ennemis etc). Prend en paramètre un GameTime : celui-ci permettant de gérer le temps.<br />Draw(GameTime gameTime) : permet de dessiner de manière répétitives chaque élément.<br />Mettre en place des textures 2D : mettre l’image souhaitée dans la solution, l’appeler et l’instancier dans LoadContent().<br />Pour mettre en place des images sur XNA, il faut tout d’abord les importer dans la solution. Pour cela, il suffit d’aller sur l’explorateur de solution (raccourci clavier : Ctrl+W puis S) et faire du glisser-déposer de vos images dans le dossier « Content ».<br />Remarquer « Content » avec un logo particulier.<br />Pour appeler une image, il faut d’abord la placer dans un objet. Le type d’objet utilisable pour ceci est Texture2D.<br />Pour instancier une texture 2D, il faut d’abord penser à la mettre dans la méthode LoadContent().<br />Ensuite il suffit de prépare sa texture 2D à accueilir le Content Pipeline ainsi :<br />Content.Load<Texture2D>(« nomDeVotreImage »)<br />ATTENTION : si vous aviez une image appelée alpha.png, il faudra marquer : Content.Load<Texture2D>(«alpha »). Il ne faut donc pas mettre le format de l’image à la fin !<br />Exemple :<br />Je prend une image nommée « backgrounds » qui est dans le dossier « Contentackground ».<br />Savoir dessiner une texture 2D : utiliser un SpriteBatch dans la méthode Draw().<br />Nous avons dorénavant mis en place une texture. Cependant celle-ci doit être dessinée. Pour cela, il faut utiliser un SpriteBatch, créé par défaut dans le LoadContent() en tant que spriteBatch.<br />S’il vous faut créer un SpriteBatch, penser que celui-ci prend en paramètre un GraphicDevice, disponible grâce au GraphicsDeviceManager. Par défaut, il s’agit de la variable graphics.<br />Le SpriteBatch doit être utilisé dans Draw() pour mettre en place un dessin.<br />Penser d’abord à démarrer le SpriteBatch dans Draw() avec : spriteBatch.Begin().<br />Penser ensuite à lui dire tout ce que vous voulez dessiner.<br />Et enfin pensez à l’arrêter : spriteBatch.End().<br />Supposons que nous voulons dessiner dans notre SpriteBatch, il faudra utiliser : spriteBatch.Draw(paramètres).<br />Il faut savoir qu’il existe plusieurs surcharges de la méthode faisant qu’elle utilise plusieurs paramètres. Voici une définition des paramètres possibles :<br />Texture2D : prend une texture.<br />Rectangle : prend un rectangle définissant un dessin de votre texture. Permet de dimensionner votre texture (et donc au préalable de l’aggrandir grâce à Width et Height) et de la placer sur votre écran. On va également préciser la position sur votre écran de la texture (via X et Y).<br />Vector2 : permet de mettre en place un vecteur (donc de gérer la position X/Y d’une texture). Il peut y en avoir deux dont 1 sert également à gérer la rotation (ce sera le vecteur d’origine).<br />Rectangle? : prend un rectangle source. Ceci est utilisé dans le cas des Sprite Sheet, pour séparer chaque sprite qui est à l’intérieur d’un Sprite Sheet.<br />Color : permet de définir une couleur à votre texture (Color.White permet de ne pas mettre de couleur particulière à votre texture).<br />float : Ici on peut en avoir 3 différents. Un sera pour l’angle de rotation en radian. Le second sera pour le zoom de votre texture (ATTENTION à bien toujours le mettre à 1 sinon votre texture ne sera jamais présente !). Le troisième sera pour la profondeur.<br />SpriteEffect : le SpriteEffect permet de faire un effet miroir de votre texture. FlipHorizontally fait l’effet miroir de gauche à droite.<br />Exemple avec mise en place d’une texture, d’un rectangle de dimension et d’une couleur :<br />Exemple avec mise en place d’une texture, d’un rectangle de base, d’un rectangle source (pour couper le sprite sheet) et d’une couleur :<br />Exemple avec mise en place d’une texture, d’un vecteur, d’un rectangle source, d’une couleur, d’une rotation, d’un vecteur d’origine,  d’un zoom, d’un SpriteEffect et d’une profondeur :<br />A savoir : En XNA, penser que votre écran de jeu a un axe abscisses (X)/ordonnées (Y) tel que le point d’origine (0,0) est en haut, à gauche.<br />Exemple :<br />Mettre plusieurs textures et savoir gérer leurs superpositions : le premier sera celui le plus au fond, le dernier sera le plus proche.<br />Dans le SpriteBatch, l’ordre est simple : le premier élément dessiné sera celui placé le plus au fond. C’est comme dans une peinture !<br />Ainsi le dernier élément placé sera donc le dernier à être dessiné.<br />Exemple :<br />Ici, si on prend le code dans le switch, case 1, le premier « hill » est placé dans notre écran PUIS le deuxième « hill2 » est placé faisant que « hill2 » sera AU DESSUS de « hill ».<br />A savoir : penser que quand vous ajoutez des composants DrawableGameComponent, ils se placeront selon leur ordre d’ajout donc le premier ajouté sera donc celui le plus au fond de votre écran !<br />Savoir mettre des valeurs de rectangles, de vecteurs par défaut dépendantes des textures : dans la méthode LoadContent().<br />Vous aurez remarqué que pour nos Draw dans le SpriteBatch, nous avons souvent besoin de vecteurs ou de rectangles.<br />Si on veut que ces vecteurs ou rectangles prennent des valeurs reprises de la texture, il est nécessaire de les placer là où on initialise la texture c'est-à-dire le LoadContent().<br />En effet, les placer dans Update() ou Draw() serait un très mauvais choix car ceux-ci sont systématiquement relancés (contrairement à LoadContent()).<br />Voici un exemple :<br />Ici on voit que je donne à mon vecteur marioMovements une hauteur qui DEPEND de ma texture, d’où la nécessité de faire mon instance de vecteur dans le LoadContent().<br />Connaître la notion de sprite et comprendre comment gérer les Sprite Sheet : utilisation d’un rectangle source prenant la taille d’un sprite du sprite sheet, sachant que chaque sprite est séparé par une même largeur et hauteur.<br />Le sprite est en fait un simple personnage qui possède un unique mouvement.<br />Un sprite sheet est simplement composé de plusieurs sprites permettant de donner une dynamique de mouvements (car un sprite = un mouvement) et donc par exemple de faire qu’un personnage puisse courir, sauter, tomber etc.<br />Pour mettre en place un sprite sheet, il est essentiel d’avoir une largeur et hauteur égales entre chaque sprite de ce sprite sheet.<br />Exemple de Sprite Sheet :<br />Ici Mario a 4 sprites dont chaque sprite a une largeur de 16 et une hauteur de 27. Le total de sa largeur (c'est-à-dire les 4 sprites réunis) est également à noter : 64.<br />Pour mettre en place une solution avec Sprite Sheet, il est essentiel d’instancier un Rectangle qui commencera au début du sprite sheet (ici le début du sprite sheet est à X = 0 et Y = 0) et qui aura pour largeur celle d’UN SPRITE (16 ici) et la longueur d’UN SPRITE.<br />Ensuite, il faudra penser à glisser entre chaque sprite en ajoutant à chaque fois à l’abscisse du rectangle (X), la largeur d’un sprite. <br />Pour revenir à la case départ, penser à faire un modulo sur l’abscisse du rectangle (X) en utilisant la largeur totale de notre sprite sheet (ici 64).<br />Exemple d’instance :<br />Le rectangle nommé marioSheet est mon instance, contenant uniquement une largeur de 16 et une hauteur de 27, c'est-à-dire : un sprite de notre sprite sheet. La texture « Characters/mariobrosdroite » est un sprite sheet. Le vecteur va permettre de bouger la texture par rapport à l’écran alors que le rectangle va permettre de glisser la texture vers un autre sprite.<br />Exemple de glissage :<br />Ici dans Update(), j’ai décidé d’avancer Mario en gérant à la fois son vecteur (qui avance sa texture) et son rectangle (qui avance son sprite sheet). La partie du sprite sheet est à l’intérieur du compteur : j’ajoute 16 à l’abscisse de mon rectangle et je module à 64, la totalité de l’image<br />Savoir utiliser la rotation (vecteur d’origine + angle de rotation), le scaling (zoom), les SpriteEffect (effet miroir) via le SpriteBatch.<br />Pour pouvoir utiliser rotation, zoom, SpriteEffect, il faut d’abord les utiliser dans les Draw() du SpriteBatch.<br />Une rotation va permettre de changer d’angle votre texture mais pour cela il est nécessaire de prévoir un vecteur d’origine puis un angle.<br />L’angle peut se faire via l’aide de la classe MathHelper (et ses propriétés Pi).<br />Un zoom s’utilise simplement avec des nombres flottants ( ne pas oublier le f après le chiffre quand on gère des nombres flottants). Attention à ne pas l’avoir à zéro, sinon plus rien ne s’affiche.<br />Un SpriteEffect est une énumération permettant de tourner votre texture dans le sens d’un miroir (donc une symétrie par rapport à un axe). Attention à ne pas confondre avec la rotation.<br />Mettre en place des classes DrawableGameComponent et savoir les ajouter dans la classe Game1.<br />Une classe DrawableGameComponent permet de créer des classes entières pour un élément au lieu de tout faire au niveau de Game1.<br />Pour la créer, il faut d’abord mettre en place un GameComponent puis changer l’héritage par DrawableGameComponent.<br />Exemple :<br />Avant, j’avais juste GameComponent et je l’ai remplacé par DrawableGameComponent.<br />Penser à bien remettre toutes les méthodes en écrivant « override » et vous aurez une petite bulle où vous pouvez choisir les méthodes à redéfinir. Logiquement il faut remettre : LoadContent(), UnloadContent() et Draw(GameTime gameTime).<br />Il suffit ensuite de faire comme dans la classe Game1.<br />Pour associer à Game1 nos DrawableGameComponent, vous aurez remarqué que dans le constructeur du DrawableGameComponent j’ai un constructeur prenant un Game. C’est par cela qu’on pourra gérer la liaison entre les deux classes.<br />Dans Game1, il faudra juste ajouter : Components.Add(DrawableGameComponent).<br />Exemple :<br />J’ai ajouté un Drawable Mario, que j’ai instancié en fonction de la classe Game1 (via this) puis je l’ai ajouté en tant que composant.<br />Dans DrawableGameComponent, pour reprendre les éléments de notre Game1 (attention à penser à mettre quelques éléments en public : en autre le GraphicsDeviceManager), il suffit de faire un cast : ((Game1)Game)<br />Autre méthode possible en exemple :<br />Ici, ma classe Game1 (que j’ai renommé MarioGame), j’en crée un objet que j’instancie avec le Game game présent dans le constructeur de mon DrawableGameComponent.<br />Permettre la gestion utilisateur (utilisation des manettes, du clavier, de la souris) : classes Keyboard, Mouse et GamePad.<br />Pour qu’un utilisateur puisse jouer, il doit pouvoir contrôler au moins 1 texture. Pour cela, il y a présence de classes telles que Keyboard, Mouse et GamePad.<br />ATTENTION : il est inutile de les instancier… leurs méthodes sont statiques et donc disponible à partir de la classe.<br />Il faut penser à gérer ces événements dans Update().<br />Exemple :<br />Ici si j’appuie sur Haut (IsKeyDown(Keys.Up)), ma texture va perdre 30 en ordonnée (elle va donc monter sur mon écran ).<br />Penser qu’on peut gérer quand aucune touche n’est appuyée de la manière suivante :<br />Savoir gérer les collisions entre deux rectangles (méthode Intersects).<br />Pour la gestion des collisions, il faut penser à mettre en place au moins deux rectangles.<br />Pour gérer la collision il suffit de faire : rectangleA.Intersects(rectangleB).<br />Ce résultat envoie un booléen précisant s’il y a collision.<br />A savoir : je vous recommande de créer des méthodes dans vos Drawable et ensuite de les appeler dans la classe Game1.<br />Exemple :<br />Dans mon Drawable, je renvois un rectangle de mon Mario auquel je mets à jour son mouvement (très important !).<br />Même chose pour mon Goomba (un ennemi).<br />Ici dans mon Update de Game1, je dis que si Mario est en collision avec Goomba alors selon si Mario saute ou non, je dispose soit Goomba soit Mario.<br />Utiliser XACT, l’outil de mise en place de musiques avec XNA.<br />Pour pouvoir gérer les sons/musiques sur XNA, il faut lancer XACT. Pour cela, il faut aller chercher ici (si vous avez la version 3 de XNA, logiquement c’est pareil pour la version 2) : C:rogram Filesicrosoft XNANA Game Studio3.0ools <br />Ouvrer : Xact.exe (et AudConsole.exe si vous voulez pouvoir écouter les sons ajoutés).<br />Dedans, il est nécessaire de créer un nouvel élément en allant sur File > New Project.<br />Ensuite, penser à renommer votre projet AVANT enregistrement, sinon ce sera trop tard ! (Le nom est important)<br />Ajouter une Wave Bank et faites clique droit « Insert Wave File(s) » et prenez toutes vos musiques en .WAV ou .AIFF. (nommer bien votre Wave Bank). A savoir : le choix multiple est possible.<br />Ajouter ensuite une Sound Bank. Faites glisser déposer les éléments de votre Wave Bank dans la partie Cue de votre Sound Bank. Nommer bien votre Sound Bank.<br />Enregistrer tout et c’est fini avec XACT.<br />Résultat possible :<br />Mettre en place la musique dans la solution en reprenant le .xap créé par XACT.<br />Pour mettre la musique dans votre jeu, n’oubliez pas les étapes suivantes :<br />Dans le dossier « Content » de notre solution (via Solution Explorer), insérer le fichier .xap créé par XACT.<br />Via Windows, aller dans le dossier de votre solution, dans le dossier « Content » et ajouter TOUT les Wav pour qu’ils soient retrouvés.  JE VOUS PREVIENS QUE JE NE SUIS PAS SUR DE CELA… MAIS JE N’ARRIVE PAS A FAIRE FONCTIONNER AUTREMENT…<br />Dans votre solution, instancier trois éléments :<br />AudioEngine, WaveBank et SoundBank.<br />Finir par jouer une musique grâce au SoundBank et la méthode PlayCue attendant le nom d’une musique (Cue Name).<br />Ne pas oublier de mettre à jour le AudioEngine via sa méthode Update.<br />Exemple :<br />ATTENTION : L’AudioEngine prend un .xgs dont le nom sera celui du .xap. Le WaveBank prend le nom du wave bank créé dans XACT et a pour extension .xwb. De même niveau SoundBank sauf que c’est une extension .xsb.<br />