/// <summary> /// Affiche à l'écran le sprite en fonction de la position de la camera. L'affichage est /// déléguée à palette afin d'afficher la tuile courante d'animation. /// </summary> /// <param name="camera">Caméra à exploiter pour l'affichage.</param> /// <param name="spriteBatch">Gestionnaire d'affichage en batch aux périphériques.</param> public override void Draw(Camera camera, SpriteBatch spriteBatch) { // Comme l'attribut _position contient la position centrée du sprite mais // que Draw() considère la position fournie comme celle de l'origine du // sprite, il faut décaler _position en conséquence avant d'invoquer Draw(). this.ForcerPosition(Position.X - (this.Width / 2), Position.Y - (this.Height / 2)); // Créer destRect aux coordonnées du sprite dans le monde. À noter que // les dimensions de destRect sont constantes. Rectangle destRect = new Rectangle((int)Position.X, (int)Position.Y, this.Width, this.Height); // Afficher le sprite s'il est visible. if (camera == null) { // Afficher la tuile courante. this.Palette.Draw((int)this.IndexTuile, destRect, spriteBatch); } else if (camera.EstVisible(destRect)) { // Puisque le sprite est visible, déléguer à la palette de tuiles la tâche d'afficher // la tuile courante. // Décaler la destination en fonction de la caméra. Ceci correspond à transformer destRect // de coordonnées logiques (i.e. du monde) à des coordonnées physiques (i.e. de l'écran). camera.Monde2Camera(ref destRect); // Afficher la tuile courante. this.Palette.Draw((int)this.IndexTuile, destRect, spriteBatch); } // Remettre _position au centre du sprite. this.ForcerPosition(Position.X + (this.Width / 2), Position.Y + (this.Height / 2)); }
/// <summary> /// Affiche à l'écran la partie du monde visible par la caméra. /// </summary> /// <param name="camera">Caméra à exploiter pour l'affichage.</param> /// <param name="spriteBatch">Gestionnaire d'affichage en batch aux périphériques.</param> public abstract void Draw(Camera camera, SpriteBatch spriteBatch);
/// <summary> /// Affiche à l'écran la partie de la mappe monde visible par la camera. /// </summary> /// <param name="camera">Caméra à exploiter pour l'affichage.</param> /// <param name="spriteBatch">Gestionnaire d'affichage en batch aux périphériques.</param> public override void Draw(Camera camera, SpriteBatch spriteBatch) { // Initialiser le rectangle de destination aux dimensions d'une tuile Rectangle destRect = new Rectangle(0, 0, this.Palette.LargeurTuile, this.Palette.HauteurTuile); // Afficher une rangée à la fois for (int row = 0; row < this.MappeMonde.GetLength(0); row++) { for (int col = 0; col < this.MappeMonde.GetLength(1); col++) { // Calculer la position de la tuile à l'écran destRect.X = col * this.Palette.LargeurTuile; destRect.Y = row * this.Palette.HauteurTuile; // Afficher la tuile si elle est visible par la caméra if (camera.EstVisible(destRect)) { // Puisque le sprite est visible, déléguer à la palette de tuiles la tâche d'afficher // la tuile courante. // Décaler la destination en fonction de la caméra. Ceci correspond à transformer destRect // de coordonnées logiques (i.e. du monde) à des coordonnées physiques (i.e. de l'écran). camera.Monde2Camera(ref destRect); // Afficher la tuile courante this.Palette.Draw(this.MappeMonde[row, col], destRect, spriteBatch); } } } }
/// <summary> /// Affiche à l'écran la partie de la mappe monde visible par la caméra. /// </summary> /// <param name="camera">Caméra à exploiter pour l'affichage.</param> /// <param name="spriteBatch">Gestionnaire d'affichage en batch aux périphériques.</param> public override void Draw(Camera camera, SpriteBatch spriteBatch) { // Initialiser le rectangle de destination aux dimensions d'une image. Rectangle destRect = new Rectangle(0, 0, this.LargeurImage, this.HauteurImage); // Afficher une rangée à la fois. for (int row = 0; row < this.Textures.GetLength(0); row++) { for (int col = 0; col < this.Textures.GetLength(1); col++) { // Calculer la position de l'image à l'écran. destRect.X = col * this.LargeurImage; destRect.Y = row * this.HauteurImage; // Afficher l'image si elle est visible dans la caméra. if (camera.EstVisible(destRect)) { // Puisque l'image est visible, l'afficher. // Décaler la destination en fonction de la caméra. Ceci correspond à transformer destRect // de coordonnées logiques (i.e. du monde) à des coordonnées physiques (i.e. de l'écran). camera.Monde2Camera(ref destRect); // Afficher l'image courante. spriteBatch.Draw(this.Textures[row, col], destRect, null, Color.White); // afficher la tuile } } } }
/// <summary> /// Permet au jeu d'effectuer toute initialisation avant de commencer à jouer. /// Cette fonction membre peut demander les services requis et charger tout contenu /// non graphique pertinent. L'invocation de base.Initialize() itèrera parmi les /// composants afin de les initialiser individuellement. /// </summary> protected override void Initialize() { // Initialiser la vue de la caméra à la taille de l'écran. this.camera = new Camera(new Rectangle(0, 0, this.graphics.GraphicsDevice.Viewport.Width, this.graphics.GraphicsDevice.Viewport.Height)); // Activer la gestion de services. ServiceHelper.Game = this; // Activer le service de gestion de l'input. Essayer premièrement // d'activer la manette, sinon le clavier GamePadState gamepadState = GamePad.GetState(PlayerIndex.One); if (gamepadState.IsConnected) { this.Components.Add(new ManetteService(this)); } else { this.Components.Add(new ClavierService(this)); } this.listeProjectiles = new List<Sprite>(); this.listeProjectileFini = new List<Sprite>(); this.listeBloc = new List<Sprite>(); this.listeBlocFini = new List<Sprite>(); this.listeOgres = new List<Ennemi>(); this.listeOgresFini = new List<Ennemi>(); this.listeSwitch = new List<Sprite>(); this.listeSwitchFini = new List<Sprite>(); this.listePorte = new List<Sprite>(); this.listePorteFini = new List<Sprite>(); this.listePorteHorizontale = new List<Sprite>(); this.listePorteHorizontaleFini = new List<Sprite>(); this.listeVideJoueur = new List<Sprite>(); this.listeVideJoueurFini = new List<Sprite>(); this.listeFood = new List<Sprite>(); this.listeFoodFini = new List<Sprite>(); this.boolFood = true; this.listeClef = new List<Sprite>(); this.listeClefFini = new List<Sprite>(); this.boolClef = false; this.portesClefOuvert[0] = false; // Créer les attributs de gestion des explosions. this.randomExplosions = new Random(); this.randomPJEnemi = new Random(); this.probPJ = 0.01f; // Le jeu est en cours de démarrage. Notez qu'on évite d'exploiter la prorpiété EtatJeu // car le setter de cette dernière manipule des effets sonores qui ne sont pas encore // chargées par LoadContent() this.etatJeu = Etats.Demarrer; base.Initialize(); }