IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

avis aux amateurs(trices) de la SDL !!


Sujet :

C

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 8
    Points : 8
    Points
    8
    Par défaut avis aux amateurs(trices) de la SDL !!
    Il y'a quelque mois j'avais posté,sur ce forum, un sujet parlant d'un probleme en ce qui concerne les diagonales en SDL. Je l'ai recherché mais il semble qu'on l'ait effacé !
    Si par exemple, en appuyant ,sur le clavier, SDLK_DOWN et SDLK_RIGHT, mon personnage(SDL_Surface *heros que je blite dans SDL_Rect rectheros) je voulais que *heros se déplace vers le bas et la droite en même temps. Mais ce n'etait pas possible. Et de plus une personne(un VIP) m'avait dis qu'il faudrait REPROGRAMMER LE CLAVIER mais qu'elle ne savait pas comment le faire.

    Eureka (J'ai trouvé!)

    le principe est simple, j'ai crée 4 bool:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    bool Up, Left, Right, Down;
    en appuyant sur SDLK_DOWN, j'intialise bool Down = true; de même pour SDLK_RIGHT

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
     
          if(event.type == SDL_KEYDOWN)
           {                         
            if(event.key.state == SDL_PRESSED)
            {
              switch(event.key.keysym.sym)
              {
                case SDLK_ESCAPE :*game = false; break;
     
     
                case SDLK_UP    :Right = true; 
     
                                          break;
     
     
                case SDLK_DOWN  :Down = true; 
     
                                          break;
     
     
                case SDLK_LEFT  :Left = true;
     
                                          break;
     
     
                case SDLK_RIGHT : Right = true;    
     
                                          break;
     
     
              }  
     
            }
     
           }
    et biensûr en restant APPUYE !

    Et en relâchant ils sont initialisés à false.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    if(event.type == SDL_KEYUP)
           {
              switch(event.key.keysym.sym)
              {
     
                case SDLK_UP    :   Up = false;
                                    break;
     
     
                case SDLK_DOWN  :   Down = false;
                                    break;
     
     
                case SDLK_LEFT  :   Left = false;
                                    break;
     
     
                case SDLK_RIGHT :   Right = false;   
                                    break;
     
     
              }   
     
           }
    et nous nous voulons que le *heros aille en bas et a droite en même temps. et donc on aura une COMBINAISON de touche PRESSEES
    vX et vY sont des distances qui correspondent à des "int"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
     
           if(Up == true && Left == false &&            //up
              Right == false && Down == false && )
              {rectheros.y = rectheros.y - vY;}
     
           else if(Up == false && Left == true &&       //left
              Right == false && Down == false &&)
              {rectheros.x = rectheros.x - vX;}
     
           else if(Up == true && Left == true &&        //leftup
              Right == false && Down == false &&)
              {rectheros.y = rectheros.y - vY;   
               rectheros.x = rectheros.x - vX;}
     
           else if(Up == false && Left == false &&       //right
              Right == true && Down == false && )
              {rectheros.x = rectheros.x + vX;}
     
           else if(Up == true && Left == false &&        //rightup
              Right == true && Down == false &&)
              {rectheros.y = rectheros.y - vY;
               rectheros.x = rectheros.x + vX;}
     
           else if(Up == false && Left == true &&         //leftdown
              Right == false && Down == true &&)
              {rectheros.y = rectheros.y + vY;   
               rectheros.x = rectheros.x - vX;}   
     
           else if(Up == false && Left == false &&        //rightdown
              Right == true && Down == true &&)
              {rectheros.y = rectheros.y + vY;      // <- c'est ce que nous 
               rectheros.x = rectheros.x + vX;}     //   voulons
     
           else if(Up == false && Left == false &&         //down
              Right == false && Down == true && )
              {rectheros.y = rectheros.y + vY;}
    De cette manière notre *heros(SDL_Surface *heros) se deplace comme on le souhaite, en changeant, tout simplement, ses coordonnées(SDL_Rect rectheros)

    Et voilà j'ai reussi !

  2. #2
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    8
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 8
    Points : 8
    Points
    8
    Par défaut
    j'ai oublié de préciser! Lorsque j'avais posté le sujet qu'ils ont effacés, je programmais en C mais maintenant je suis passé au C++ et donc, arretez moi si je me trompe, en C il n'ya pas de type bool ce n'est qu'en C++. Alors à la place placez-y des:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int Up, Down, Right, Left;
    initialisés à 0 cela correspond à false et à 1(different de 0) à true.

  3. #3
    Membre actif Avatar de sorry60
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    802
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 802
    Points : 253
    Points
    253
    Par défaut
    bravo !
    Si je pleure encore qu'un jour tu me reviennes,
    C'est que sans toi je suis comme un Roi sans sa Reine.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 14
    Dernier message: 04/03/2013, 08h51
  2. QCM sur un attribut UML : avis aux amateurs
    Par frynt dans le forum Diagrammes de Classes
    Réponses: 1
    Dernier message: 06/01/2012, 09h23
  3. [DOM] Avis aux amateurs RegExp
    Par LEK dans le forum Général JavaScript
    Réponses: 15
    Dernier message: 28/05/2007, 02h05
  4. Avis aux experts : accéder aux dimensions d'un tableau.
    Par poulpi dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 25/11/2004, 09h09
  5. avis aux experts-Quels sont les logiciels les plus adaptés??
    Par chouchouappc dans le forum Décisions SGBD
    Réponses: 46
    Dernier message: 20/07/2004, 21h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo