MTProd > Dev4all > Articles > Programmation de jeux > Généralités > Déplacements & Directions dans un jeu 2D > 1 Définition, Déclaration et Initialisation
Rechercher28 Personnes en-ligne

Déplacements & Directions dans un jeu 2D

1  Définition, Déclaration et Initialisation



1.1  Introduction

Dans notre exemple nous allons créer un mouvement de 40 directions, programmé en C pour des raisons de portabilités.
Sachez que nos directions vont dans l'ordre des aiguilles du montre, c'est à dire :

  • la position 0 vers le haut

  • la 10 vers la droite

  • la 20 vers le bas

  • la 30 vers la gauche


La position 40 n'existe pas, il s'agit en fait de la position 0, après la 39 nous avons fait un tour complet et nous revenons donc à la position 0.




1.2  Macro

Tout d'abord nous allons définir un macro nommé NBRE_DIRS comme ceci :

// Nombres de directions
#define    NBRE_DIRS    40

Lors de la compilation de notre code, le compilateur remplacera la chaine NBRE_DIRS par le nombre 40, de ce fait vous aurez uniquement à éditer une ligne pour changer la valeur partout dans votre code, c'est fabuleux ces macros




1.3  Le sprite

Le sprite balle est l'objet que nous pourrons déplacer et faire tourner, nous utilisons la structure suivante pour le déclarer :

struct SPRITE
{
    float        posX;
    float        posY;
    int            dir;
} balle;

Nous déclarons des nombres réels (float en C (nombre à virgule quoi )) pour les variables posX et posY pour des raisons de précisions et de réalismes, vous comprendrez plus tard.
Nous allons en profiter pour initialiser notre structure balle :

// Initialisation des variables de la balle
balle.posX = 200;
balle.posY = 200;
balle.dir = 0;





1.4  Les tableaux de directions

Nous allons maintenant déclarer deux tableaux de nombres réels avec une dimension de NBRE_DIRS (ou le nombre de directions définit avec notre macro, plus haut), nous allons les nommer dirX et dirY.
Ces deux tableaux seront initialisés au lancement de notre application et contiendront les valeurs à ajouter à notre sprite, ici, notre objet balle.
Pour les initialiser il va nous falloir calculer le sinus et le cosinus des directions voulues, ici nous avons choisit d'utiliser 40 directions, voici donc le calcul à effectuer :
360 / 40 ce qui nous donnent 9, notez ce nombre sur une feuille de papier afin de vous en souvenir.
Pour le tableau dirX il nous faut maintenant calculer le sinus de tous les degrés en partant de 0 (direction haut) jusqu'à 351 (360-9), nous ne calculons pas 360 sachant qu'il correspond à un tour complet (0). Nous allons sauter à chaque fois de 9 degrés, cela nous donnera quelque chose comme ça (j'ai choisi une précision de 6 chiffres après la virgule (c'est suffisant)) :

sin(0) = 0.000000
sin(9) = 0.156434
sin(18) = 0.309017
...
sin(333) = -0.453990
sin(342) = -0.309017f
sin(351) = -0.156434f

Pour le tableau dirY nous commençons à calculer les cosinus à partir de 180 en tournant toujours dans le sens des aiguilles d'une montre, c'est à dire en additionnant à chaque fois 9 degrés pour enfin revenir à 171 (180-9) :

cos(180) = -1.000000
cos(189) = -0.987688
cos(198) = -0.951057
...
cos(153) = -0.891007
cos(162) = -0.951057
cos(171) = -0.987688

En C, l'initialisation de nos tableaux se fera comme ceci (je vous donne toutes les valeurs, histoire de reposer un peu vos claviers ) :

float dirX[40] =
{
    0.000000f,
    0.156356f,
    0.308866f,
    0.453778f,
    0.587528f,
    0.706825f,
    0.808736f,
    0.890753f,
    0.950859f,
    0.987576f,
    1.000000f,
    0.987825f,
    0.951351f,
    0.891476f,
    0.809672f,
    0.707951f,
    0.588816f,
    0.455196f,
    0.310380f,
    0.157929f,
    0.001593f,
    -0.154783f,
    -0.307350f,
    -0.452358f,
    -0.586238f,
    -0.705698f,
    -0.807798f,
    -0.890028f,
    -0.950365f,
    -0.987324f,
    -0.999997f,
    -0.988071f,
    -0.951841f,
    -0.892196f,
    -0.810605f,
    -0.709075f,
    -0.590102f,
    -0.456614f,
    -0.311893f,
    -0.159501f,
};

float dirY[40] =
{
    -0.999999f,
    -0.987949f,
    -0.951596f,
    -0.891837f,
    -0.810139f,
    -0.708513f,
    -0.589459f,
    -0.455905f,
    -0.311137f,
    -0.158715f,
    -0.002389f,
    0.153996f,
    0.306593f,
    0.451648f,
    0.585593f,
    0.705133f,
    0.807329f,
    0.889665f,
    0.950117f,
    0.987198f,
    1.000000f,
    0.987701f,
    0.951106f,
    0.891115f,
    0.809204f,
    0.707388f,
    0.588172f,
    0.454487f,
    0.309623f,
    0.157142f,
    0.000796f,
    -0.155569f,
    -0.308108f,
    -0.453068f,
    -0.586883f,
    -0.706262f,
    -0.808267f,
    -0.890391f,
    -0.950613f,
    -0.987451f,
};

(ce code a été généré avec GenDirs)
Voilà, nous avons déclaré toutes les constantes et variables nécessaire pour notre exemple, passons maintenant à la mise en pratique.





 Sommaire2  Mise en pratique  >>

 Accés rapide

1  Définition, Déclaration et Initialisation

Introduction

Macro

Le sprite

Les tableaux de directions

2  Mise en pratique
Voir le sommaire complet

 Liens utiles

  • Publier un article
  • Envoyer cette page
  • Ecrire à l'auteur

  •  Mini-Chat

    Miuka (21h15): Coin coin de 2014
    Miuka (21h15): Des gens qui ont migré sur le forum Clickteam ou ailleurs ?
    Strike (09h45): Salut les vieux !
    Hikarion (12h46): Salut les djeunz
    Hikarion (13h38): A qui profite le scandale ?
    Hikarion (13h44): le chat irc est toujours actif ?
    Exodraw2020 (00h31): Houlala ça fait 15ans que je n'avais pas mis les pieds ici ! :
    Exodraw2020 (22h31): Dev4all 2021 ! : ) on y crois !
    Exodraw2020 (22h32): Je viens de publier et présenter mon jeu DaddHunter
    Exodraw2020 (22h33): rangé dans la catégorie jeu d'action aventure, du coup Action

    Votre message



     Archives

     Dev4all Newsletter

    Restez à jour avec la newsletter mensuelle !

    Votre e-mail


    1805 abonnés

     Recommander Dev4all

    Recommandez Dev4all à un ami. Cela fera grandir notre communauté !

    E-mails de vos amis




    [ Accueil | S'inscrire | Mon Dev4all | Communauté | Téléchargements | Articles | Forums | Chat ]

    [ A propos de Dev4all | Aide | La charte Dev4all | Contact ]

    © 2000-2022 MTProd. Tous droits réservés.
    L'utilisation de Dev4all implique l'acceptation et le respect de la charte Dev4all.