Collisions et physique créer un simulateurde vaisseau spatial

Collisions et physique créer un simulateurde vaisseau spatial

Vous commencez à connaître bon nombre des aspects du framework XNA et vous vous êtes sûrement déjà aventuré dans la création d’un vrai jeu. Vous avez alors certainement été confronté aux problèmes liés aux règles physiques de l’univers que vous avez créé, surtout si ce jeu était un clone d’Asteroids, ou tout du moins un jeu y ressemblant.Il s’agit d’un jeu de tir spatial en deux dimensions qui a fait sensation en 1979 (et qui continue sûrement à remporter du succès auprès de joueurs nostalgiques de ce temps). Dans ce jeu, vous contrôlez un vaisseau qui doit faire face, armé de son lance-missiles, à des champs d’astéroïdes et des vaisseaux ennemis. Le vaisseau que le joueur dirige connaît une inertie évoquant le milieu spatial, ce qui rend sa prise en main délicate.Dans ce chapitre consacré à la création d’un petit jeu de simulation spatiale en 2D, notre but est d’étudier les collisions par rectangle ou par pixels ainsi qu’un moteur physique (le module d’un jeu chargé du déplacement de diverses entités), FarseerPhysics.

Comment détecter les collisions

Commencez par créer un projet vierge. Avant toute chose, ajoutez deux variables statiques à la classe principale du projet. Ces dernières définiront la taille de la fenêtre, il faudra donc les appliquer à l’objet graphics. Les valeurs qui sont utilisées ici correspondent à une fenêtre étroite, mais assez haute.Maintenant, occupez-vous de la création du vaisseau du joueur. En espérant que cela ne froissera pas les fans du jeu d’origine, dans l’exemple proposé dans ce livre, le joueur contrôlera un simple triangle blanc de 32 pixels par 32 pixels, visible à la figure 10-1.Comme d’habitude, importez les fichiers suivants des précédents projets : IKeyboard Service.cs, KeyboardService.cs, ServiceHelper.cs et Sprite.cs. Ajoutez une classe Player au projet ; vous la ferez dériver de la classe Sprite. Puisque la position du vaisseau du joueur ne peut pas être déterminée dès l’appel au constructeur (il faut connaître la taille de la texture pour pouvoir centrer le vaisseau), passez plutôt la valeur prédéfinie Vector2 .Zero au constructeur de la classe parente.• La première est de déplacer le vaisseau en fonction des touches que le joueur presse : rien de plus facile en appelant le service dédié. Profitez-en pour ajouter un élément de gameplay déterminant : la vitesse du vaisseau lorsqu’il recule sera moins importante que lorsqu’il avance.

La structure qui a été retenue pour ce jeu se contente d’utiliser des classes dérivées de la classe Sprite. Cependant, vous pourriez très bien faire dériver la classe Player de la classe DrawableGameComponent, ou encore utiliser les interfaces IGameComponent, IUpdatable et IDrawable. N’hésitez pas à récrire ce mini-jeu exemple avec ces solutions, cela constitue un très bon entraînement.Dernière méthode de cette classe, ResetPosition () se chargera de placer le vaisseau du joueur au centre de la largeur de l’écran et en retrait de 10 % de sa hauteur. Cette méthode sera appelée en début de partie (après le chargement de la texture du vaisseau), ainsi qu’à chaque fois que le joueur aura perdu.Créez une classe Asteroid et ajoutez-lui un attribut speed de type Vector2 : il pourra y avoir plusieurs astéroïdes à l’écran, la position et la vitesse de chacun d’entre eux sera aléatoire. Vous fixez ces deux éléments dans une méthode privée Initialize (). Pour la génération de nombres aléatoires, vous utiliserez un objet statique de la classe Random et vous passerez à son constructeur le nombre de millisecondes à cet instant.

Avancé. Les nombres aléatoires

Il faut savoir qu’en informatique, les nombres aléatoires ne le sont pas réellement. En fait, il est impossible de générer une suite de nombres réellement aléatoires, il faudrait plutôt les appeler nombres pseudo-aléatoires. La détermination de ces nombres se fait via l’utilisation d’une graine, c’est-à-dire d’une valeur de départ. Si la valeur de cette graine est toujours la même, les nombres générés par le programme seront toujours les mêmes. Pour éviter ce problème, vous pouvez faire varier la valeur de la graine en fonction du temps.La méthode Next() de l’objet random attend comme paramètres une borne inférieure et une borne supérieure, puis retourne un entier. Initialement, le sprite devra se situer légèrement au-dessus de la fenêtre et n’importe où sur l’axe des abcisses. Pour la vitesse, en ce qui concerne l’axe X, l’astéroïde doit pouvoir aller vers la gauche comme vers la droite ; en ce qui concerne l’axe Y, il doit uniquement pouvoir aller vers le bas. Vous n’avez plus qu’à utiliser ces deux classes. Il n’y a rien de spécial à souligner en ce qui concerne la création du vaisseau du joueur. Vous stockerez les astéroïdes dans une collection List<>. Pour faire apparaître un astéroïde toutes les x secondes, utilisez un objet de type TimeSpan que vous remettrez à zéro à chaque ajout d’un nouvel objet à la liste.

Cours gratuitTélécharger le document complet

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *