Download http://bigtheme.net/joomla Free Templates Joomla! 3
Gestionnaire d'écran

SharpDX – Pong – Gestionnaire d’écran [Partie 2]

Sur la dernière partie on c’était quitté sur une simple fenêtre qui se mettait à jour et effaçait l’écran avec un fond noir, voici se que sa nous donnait :

Pong SharpDX

Dans cette partie nous allons implémenter le coter « multi-écran » dans notre Pong, c’est à dire la possibilité d’avoir un menu puis de switcher sur le jeu, ou de switcher dans les options de jeu etc…
Pour ceux qui souhaiterais avoir une vidéo de ceci je vous invite à regarder celle que j’avais réalisé il y’a quelques semaines sur le gestionnaire d’écran.
Voici la vidéo :

[…] (Cliquez sur « Lire la suite« )

Les écrans du jeu

Pour commencer nous allons créer un dossier dans notre projet, pour se faire on clic droit sur celui-ci puis « Ajouter… » et enfin « Dossier« . Nous allons le nommer « Screens« .
C’est donc dans se dossier que nous allons stocker toutes les classes et interfaces qui nous permettrons de gérer les écrans dans notre jeu.

On commence tout de suite par créer une nouvelle interface dans se même dossier, donc clic droit sur le dossier puis « Ajouter » puis « Nouvel élément.. » et dans la fenêtre qui s’ouvre sélectionnez « Interface« , et nommez cette interface « IScreen.cs« 

A quoi va t-elle nous servir ?

Il faut savoir qu’une interface est un modèle de classe, c’est-à-dire qu’elle contient la déclarations des méthodes et des propriétés sans les déclarer.
C’est une sorte de contrat qui définit les attentes sans savoir les techniques utilisées.

Nous allons donc simplement décrire ici se qu’est une « Screen« , et non pas se qu’elle doit faire ou savoir faire !

Un Screen c’est :

  • Un état, écran du jeu,
  • Elle possède un nom pour la re-connaitre,
  • Elle doit s’initialiser,
  • Elle doit charger du contenu,
  • Il y’aura des intéractions possible avec le clavier ou la souris,
  • Elle doit pouvoir se mettre à jour,
  • Elle affiche des objets à l’écran.

Se qui nous donne donc en clair :

Voilà qui est fait nous venons de déclarer l’interface pour les Screen, en gros leur contrat, ce qu’elles doivent savoir faire si vous préférez.

Il nous reste plus qu’à coder notre premier écran qui implémentera notre belle interface !

Un simple menu :

La plupart du temps les jeu s’accompagne d’introduction qui charge une vidéo, ou d’un simple texte avec des effets de rotations sur lui même etc …
Ici nous allons simplement nous contenter d’implémenter un petit Menu principale qui contiendra une image de fond qui insitera le joueur à cliquer sur la touche éspace pour lancer le jeu.

On commence tout de suite par faire une clic droit sur notre dossier « Screens » puis « Ajouter… » et enfin « Classe…« . Nommez cette classe « MainMenuScreen« 

Info’s : Il est important de bien nommer ses classes pour pouvoir s’y retrouver plus tard !

Et bien cette classe va implémenter notre interface IScreen et donc par la même occasion devra implémenter les méthodes et propriétés d’une IScreen.

Se qui nous donne :

Voilà le squelette de base de notre menu principal, pour le moment nous allons juste lui dire de dessiner un fond bleu par exemple pour le tester !

Donc avant toute chose en début de classe nous allons définir une variable privé de type Game, qui nous permettra de faire des appels au GraphicsDevice !

Puis dans la méthode Initialize nous lui attribuons sa valeur :

Et enfin dans la méthode Update nous lui indiquons que nous voulons effacer l’écran avec une couleur bleu (ou rouge comme vous voulez ! Le mieux étant de rester sur noir..)

Se n’est pas finit !

Il nous reste à implémenter notre Gestionnaire d’écran !

Le Gestionnaire d’écran

Le gestionnaire d’écran sera ici une simple liste ou nous allons insérer les nouveaux écrans du jeu, pour ensuite les initialiser, charger leur contenu et enfin les mettre à jour et les dessiner !

Dans un projet d’une plus grand envergure le mieux aurait était de créer une classe spécialement pour se Gestionnaire et le faire dériver de GameSystem.
Mais ici étant un projet bien plus petit nous allons nous contenter d’une liste de IScreen ou nous allons chercher l’écran qui nous intéresse pour l’afficher.

Donc rendez-vous dans la classe principale de notre jeu c’est-à-dire « PongGame.cs« 

Une fois à l’intèrieur nous allons déclarer, juste en dessous de la déclaration du SpriteBatch, une variable de type List<IScreen> que l’on nommera m_screensList;
Il nous faudra également une variable IScreen qui contiendra notre écran courant pour l’afficher, le mettre à jour etc …

Rien de bien méchant ici, pour ceux qui se demandent pourquoi ses deux variables sont static et bien vous découvrirez cette réponse un tout petit peu plus loin 😉

Bien maintenant nous devons initialiser la liste de Screen avec les ou la screen que l’on à implémenter, ici il sagit pour le moment de notre classe MainMenuScreen.

On se rend donc dans notre méthode initialize() et on déclare notre List ainsi :

Il ne faut pas oublier non plus de mettre à jour l’écran ainsi que de gérer les entrée clavier et/ou souris de l’écran en cour !
On va donc se servir de la méthode Update pour appeler nos deux méthodes Update et HandleEvent.

Enfin elle doit s’afficher à l’écran et donc appeler sa méthode Draw dans la méthode Draw de notre classe de base :

Ici nous indiquons que nous voulons afficher les images telles qu’elles sont sur notre écran, ainsi que nos images ne sont pas Pre-multiplié.

N’oubliez pas de terminer en appelant m_spriteBatch.End(); !

Il nous reste plus qu’à implémenter notre méthode nous permettant de changer d’écran quand on le souhaite, simplement en lui indiquant le NOM de notre écran.
Voici donc cette méthode :

Puis en début de notre classe nous devons simplement déclarer une variable static nommé « m_pong » et une auto-propriété static nommé « GameContent » comme suit :

Il nous reste plus qu’à les assigner dans notre constructeur :

Enfin dans notre méthode Initialize insérez ceci juste avant base.Initialize() :

Et voilà si l’on recompile le projet et qu’on le lance il nous affichera une belle petit fenêtre bleu !

Ceci conclue cette partie 2, je vous donne rendez-vous dans la prochaine partie ou nous allons implémenter la classe Sprite pour gérer au mieux les images de notre jeu !

Check Also

CaffeinatedPsychics C0ttron

C0ttron – Ludum dare 34

Pour certains, les JAMS sont un réel challenge dont le but n’est que de gagner, …

Laisser un commentaire