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

SDL Discussion :

Probleme de saut SDL (jump du perso)


Sujet :

SDL

  1. #1
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 60
    Points : 33
    Points
    33
    Par défaut Probleme de saut SDL (jump du perso)
    Bonsoir,
    Comme son nom l'indique déjà, j'ai un problème dans la gestion de l’événement de saut de mon personnage .(il s'agit d'un jeu du même principe que Mario a peu prés ...)
    Bon après quelques recherches, je suis tombé sur des formules vraiment compliquée, du genre gravité 9. ... et la vitesse etc ...
    J'aimerais bien une formule assez simple pour résoudre ce problème, sinon une explication de la notion de gravité et de la solution sur le net.
    Merci énormément .

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 855
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 855
    Points : 218 548
    Points
    218 548
    Billets dans le blog
    118
    Par défaut
    Bonjour,

    Une solution simple ? Pendant l'état de saut, vous faites :
    hauteurDuPerso += vitesseSaut
    Et une fois, lorsque vous le voulez, vous le faites chuter :
    hauteurDuPerso -= vitesseChute
    (Il faut aussi faire les tests de collision avec le sol)

    Sinon, on peut utiliser un sinus pour que ce soit plus beau :
    hauteurDuPerso += sin(tempsSaut) * vitesseSaut
    Mais les vrais formules donnent de meilleurs résultats. Vous pouvez vous servir de la wikipedia : http://fr.wikipedia.org/wiki/Cin%C3%A9matique
    N'hésitez pas à poser des questions, sur des points précis de cette dernière méthode
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 576
    Points : 1 528
    Points
    1 528
    Par défaut
    Salut,

    Une implémentation très grossière du PFD (principe fondamentale de la dynamique) donnerait:

    Au moment du saut, on met les conditions initiales :
    position = 0 (si ton perso est sur le sol)
    vitesse = 42 (a toi de choisir la vitesse initial du saut. Plus la vitesse est élevée, plus il sautera haut)
    Pendant le saut, on fait évoluer tout ça:
    position += vitesse * dt
    vitesse -= gravité *dt (car la gravité est un accélération dirigé vers le bas. PLus la gravité est élevé, plus il retombera vite)
    Où dt est le temps écoulé depuis le step précédent (tu peux mettre dt = 1 si tu veux un résultat rapidement, mais c'est mieux de se caler sur le temp réel, ça évite des différence de comportement selon les perf des machines).

    Et on arrête ça lorsque le perso revient sur terre (lorsque position <= 0).

    A toi d'ajuster la vitesse initial et la gravité pour avoir le mouvement que tu souhaite.
    La perfection est atteinte, non pas lorsqu’il n’y a plus rien à ajouter, mais lorsqu’il n’y a plus rien à retirer. - Antoine de Saint-Exupéry

  4. #4
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 60
    Points : 33
    Points
    33
    Par défaut
    Merci pour le conseil, je tacherais d'essayer cette technique et je vous informe sur les difficultés .

  5. #5
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 60
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    Bonjour,

    Une solution simple ? Pendant l'état de saut, vous faites :

    Et une fois, lorsque vous le voulez, vous le faites chuter :

    (Il faut aussi faire les tests de collision avec le sol)

    Sinon, on peut utiliser un sinus pour que ce soit plus beau :


    Mais les vrais formules donnent de meilleurs résultats. Vous pouvez vous servir de la wikipedia : http://fr.wikipedia.org/wiki/Cin%C3%A9matique
    N'hésitez pas à poser des questions, sur des points précis de cette dernière méthode
    Dans le handleInput (), la fonction qui attends une touche pour le saut, (exple Key_Up etc... ) comment pourrai-je implementer cette solution ?
    Je voulais dire autrement quoi mettre dans le temps du saut, ethauteur du perso ?
    Citation Envoyé par pyros Voir le message
    Salut,

    Une implémentation très grossière du PFD (principe fondamentale de la dynamique) donnerait:

    Au moment du saut, on met les conditions initiales :


    Pendant le saut, on fait évoluer tout ça:

    Où dt est le temps écoulé depuis le step précédent (tu peux mettre dt = 1 si tu veux un résultat rapidement, mais c'est mieux de se caler sur le temp réel, ça évite des différence de comportement selon les perf des machines).

    Et on arrête ça lorsque le perso revient sur terre (lorsque position <= 0).

    A toi d'ajuster la vitesse initial et la gravité pour avoir le mouvement que tu souhaite.
    Desolé mais je suis débutant en fait, je n'assimile pas vraiment la notion de gravité (malgré que je l'ai appris en physique), ca semble tres complexe si on va suivre cette solution avec une force E=mc² et la trajectoire etc ...
    Moi qui cherche une solution basique du saut

  6. #6
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 855
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 855
    Points : 218 548
    Points
    218 548
    Billets dans le blog
    118
    Par défaut
    Citation Envoyé par dazwy Voir le message
    Dans le handleInput (), la fonction qui attends une touche pour le saut, (exple Key_Up etc... ) comment pourrai-je implementer cette solution ?
    Je voulais dire autrement quoi mettre dans le temps du saut, ethauteur du perso ?
    En théorie, vous avez une classe ou une structure pour le joueur. Lorsque vous arrivez dans la fonction handleInput() et que vous repérez le saut, vous allez changer l'état du joueur (disons que c'est une machine à état) en JOUEUR_SAUTE (par exemple). Du coup, dans la fonction de mis à jour (update) du joueur, selon l'état vous allé commencer à appliquer les changements adéquats.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  7. #7
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 60
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par LittleWhite Voir le message
    En théorie, vous avez une classe ou une structure pour le joueur. Lorsque vous arrivez dans la fonction handleInput() et que vous repérez le saut, vous allez changer l'état du joueur (disons que c'est une machine à état) en JOUEUR_SAUTE (par exemple). Du coup, dans la fonction de mis à jour (update) du joueur, selon l'état vous allé commencer à appliquer les changements adéquats.
    J'ai procédé ainsi suivant quelques recherches, et voila que mon perso saute, mais j'ai un petit soucis, c'est que je n'arrive plus a le stopper (il cours sans arrêt suite a l'appuis de la touche droite ou gauche).
    Voila le code :
    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    void stresso::handle_input()
    {
     
     const double g = 9.81;
        const double pi = 3.14;
        int v_init = 2;
        int angle_init = pi/3;
        int t = 0;
        double v_x = cos(angle_init)*v_init;
        double v_y = sin(angle_init)*v_init;
        //If a key was pressed
     
        //If a key was pressed
        if( event.type == SDL_KEYDOWN )
        {
            //Adjust the velocity
            switch( event.key.keysym.sym )
            {
            // EVOLUTION
     
                //On met à "0" les pos abs:
                case SDLK_UP:
                box.x =get_box3();
     
                box.y = get_box2()-(perso->h);
                //On calcule la valeur relative de y:
                boxrel.x=(int)(v_x*t);
                boxrel.y=(int)((v_y*t)-((g*t*t)/2000));
     
                //On calcule maintenant les valeurs absolues
     
                box.x = box.x + boxrel.x;
                box.y = box.y - boxrel.y;
     
            //Intervalle de 10ms
     
            t+=5;
     
            // FIN EVOLUTION
            //Avec en bonus une petite mise a 0 des coordonnees lorsque mario s'en va trop loin :)
            if((box.y+(perso->h))<=(box.x))
            {
                t=0;
            }
     
    break;
                case SDLK_DOWN: yVel += stresso_HEIGHT / 2; break;
                case SDLK_LEFT: xVel -= stresso_WIDTH / 2; break;
                case SDLK_RIGHT: xVel += stresso_WIDTH / 2; break;
            }
        }
     
    }

  8. #8
    Nouveau membre du Club

    Inscrit en
    Avril 2012
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 16
    Points : 39
    Points
    39
    Par défaut
    Une solution très simple et vraiment efficace à mettre en place avec du code fait vite fait :

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
     
    class Player
    {
         float x;
         float y;
         float vx;
         float vy;
    }
     
    int main()
    {
          // Données
          int gravity = 9.81;
     
          // Ajout de la gravité
          player.vy += gravity;
     
          // Gestion des collisions ici 
          if ( collisionTete ) {
                player.vy = 0;
                player.y   = positionPlafond.y + 1;
          } else if (collisionJambes ) {
                player.vy = 0;
                player.y = positionSol.y - 1;
          }    
     
          if ( collisionGauche ) {
                player.vx = 0;
                player.x   = positionObject.x + 1;
          } else if (collisionDroite ) {
                player.vx = 0;
                player.x   = positionObject.x - 1;
          }
     
          // Evenements ici
          if ( toucheSaut ) {
                player.vy = -2; // (-2 valeur au hasard ici = Hauteur du saut)
          }
     
          if( toucheGauche ) {
                player.vx = -2; // Vitesse déplacement gauche
    *     }
          else if( toucheDroite ) {
                player.vx = 2; // Vitesse déplacement droite
    *     }
          else {
                player.vx = 0; //< Le personnage s'arrete
          }
     
     
          // Mise à jour de la position
          player.x += time * player.vx;
          player.y += time * player.vy;
    }
    Avec ça, tu obtiendras des déplacements vraiment fluide, si tu as des questions sur ce code n'hésite pas

  9. #9
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 60
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par Dono_S Voir le message
    Une solution très simple et vraiment efficace à mettre en place avec du code fait vite fait :

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
     
     
    class Player
    {
         float x;
         float y;
         float vx;
         float vy;
    }
     
    int main()
    {
          // Données
          int gravity = 9.81;
     
          // Ajout de la gravité
          player.vy += gravity;
     
          // Gestion des collisions ici 
          if ( collisionTete ) {
                player.vy = 0;
                player.y   = positionPlafond.y + 1;
          } else if (collisionJambes ) {
                player.vy = 0;
                player.y = positionSol.y - 1;
          }    
     
          if ( collisionGauche ) {
                player.vx = 0;
                player.x   = positionObject.x + 1;
          } else if (collisionDroite ) {
                player.vx = 0;
                player.x   = positionObject.x - 1;
          }
     
          // Evenements ici
          if ( toucheSaut ) {
                player.vy = -2; // (-2 valeur au hasard ici = Hauteur du saut)
          }
     
          if( toucheGauche ) {
                player.vx = -2; // Vitesse déplacement gauche
    *     }
          else if( toucheDroite ) {
                player.vx = 2; // Vitesse déplacement droite
    *     }
          else {
                player.vx = 0; //< Le personnage s'arrete
          }
     
     
          // Mise à jour de la position
          player.x += time * player.vx;
          player.y += time * player.vy;
    }
    Avec ça, tu obtiendras des déplacements vraiment fluide, si tu as des questions sur ce code n'hésite pas
    Le problème c'est que je ne vois pas comment appliquer votre code
    En fait je travaille avec les 2 Evénements (keydown et keyup).
    Je ne vois pas quoi mettre dedans suivant l'architecture de ton code .

  10. #10
    Nouveau membre du Club

    Inscrit en
    Avril 2012
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 16
    Points : 39
    Points
    39
    Par défaut
    Le problème c'est que je ne vois pas comment appliquer votre code
    En fait je travaille avec les 2 Evénements (keydown et keyup).
    En gros tu dois utiliser des états comme la dit LittleWhite un peu plus haut, ce qui donne :

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
     
    // Init
    bool toucheSaut      = false;
    bool toucheGauche  = false;
    bool toucheDroite    = false;
     
    // Suivant la façon du du gère tes evenements (Je ne me rappelle plus exactement de la SDL)
    switch (SDL_Event) 
    {
         case SDL_KEYDOWN:
                switch( key)
                {
                      case 'q':
                           toucheGauche = true;
                           break;
                      case 'd':
                           toucheDroite  = true;
                           break;
                      case 'z':
                           toucheSaut = true;
                           break;
                 }
                 break;
         case SDL_KEYDOWN:
                switch( key)
                {
                      case 'q':
                           toucheGauche = false;
                           break;
                      case 'd':
                           toucheDroite = false;
                           break;
                      case 'z':
                           toucheSaut = false;
                           break;
                 }
                 break;
     
    }
     
    // ...
    // Le code precedent avec un petit ajout
    if ( toucheSaut ) {
     
                // Le petit ajout : Je m'assure que le joueur est au sol pour sauter
                if( player.vy == 0 )  {
                     player.vy = -2; // (-2 valeur au hasard ici = Hauteur du saut)
               }
          }
     
          if( toucheGauche ) {
                player.vx = -2; // Vitesse déplacement gauche
         }
          else if( toucheDroite ) {
                player.vx = 2; // Vitesse déplacement droite
         }
          else {
                player.vx = 0; //< Le personnage s'arrete
          }
    J'avais fait un Super mario il y a 6-7 ans, je peux te donner le code source si tu le souhaites (j'utilisais la SDL il me semble)

  11. #11
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 60
    Points : 33
    Points
    33
    Par défaut
    Je vais utiliser ce code, et c'est tres aimable de votre part de m'envoyer votre code, je vais l'analyser aussi, je cree un jeu en 2D du genre mario aussi ...
    Merci !

  12. #12
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 60
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par Dono_S Voir le message
    En gros tu dois utiliser des états comme la dit LittleWhite un peu plus haut, ce qui donne :

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
     
     
    // Init
    bool toucheSaut      = false;
    bool toucheGauche  = false;
    bool toucheDroite    = false;
     
    // Suivant la façon du du gère tes evenements (Je ne me rappelle plus exactement de la SDL)
    switch (SDL_Event) 
    {
         case SDL_KEYDOWN:
                switch( key)
                {
                      case 'q':
                           toucheGauche = true;
                           break;
                      case 'd':
                           toucheDroite  = true;
                           break;
                      case 'z':
                           toucheSaut = true;
                           break;
                 }
                 break;
         case SDL_KEYDOWN:
                switch( key)
                {
                      case 'q':
                           toucheGauche = false;
                           break;
                      case 'd':
                           toucheDroite = false;
                           break;
                      case 'z':
                           toucheSaut = false;
                           break;
                 }
                 break;
     
    }
     
    // ...
    // Le code precedent avec un petit ajout
    if ( toucheSaut ) {
     
                // Le petit ajout : Je m'assure que le joueur est au sol pour sauter
                if( player.vy == 0 )  {
                     player.vy = -2; // (-2 valeur au hasard ici = Hauteur du saut)
               }
          }
     
          if( toucheGauche ) {
                player.vx = -2; // Vitesse déplacement gauche
         }
          else if( toucheDroite ) {
                player.vx = 2; // Vitesse déplacement droite
         }
          else {
                player.vx = 0; //< Le personnage s'arrete
          }
    J'avais fait un Super mario il y a 6-7 ans, je peux te donner le code source si tu le souhaites (j'utilisais la SDL il me semble)
    En fait suivant ce code, le perso saute et ne tombe pas sur terre, et puis ce n'est pas vraiment fluide

  13. #13
    Nouveau membre du Club

    Inscrit en
    Avril 2012
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Avril 2012
    Messages : 16
    Points : 39
    Points
    39
    Par défaut
    Tu as bien mis le "player.vy += gravity;" ?

    Concernant les mouvements pas assez fluide, il faut que gravity soit un float et non un int comme je l'ai fait. Quand à la variable time, il s'agit d'un float.

    Voici le code de mon Mario, ça date de 2006-2007, je codais en Français et je débutais donc c'est pas super super beau, mais ça reste très lisible comprehensible .

    J'avais codé ce jeu pour apprendre à programmer. Je met le code source ici à disposition de tout le monde, petit cadeau pour la communauté de developpez.com en gros
    Fichiers attachés Fichiers attachés

  14. #14
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 60
    Points : 33
    Points
    33
    Par défaut
    Citation Envoyé par Dono_S Voir le message
    Tu as bien mis le "player.vy += gravity;" ?

    Concernant les mouvements pas assez fluide, il faut que gravity soit un float et non un int comme je l'ai fait. Quand à la variable time, il s'agit d'un float.

    Voici le code de mon Mario, ça date de 2006-2007, je codais en Français et je débutais donc c'est pas super super beau, mais ça reste très lisible comprehensible .

    J'avais codé ce jeu pour apprendre à programmer. Je met le code source ici à disposition de tout le monde, petit cadeau pour la communauté de developpez.com en gros
    Je vous remercie !
    (ps : ca dépasse de loin mon niveau hihii)

  15. #15
    Nouveau membre du Club
    Inscrit en
    Décembre 2010
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Décembre 2010
    Messages : 60
    Points : 33
    Points
    33
    Par défaut
    Svp ça n'a pas marché, il y aurais pas quelque chose de plus simple pour effectuer ce maudit saut ?

  16. #16
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 855
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 855
    Points : 218 548
    Points
    218 548
    Billets dans le blog
    118
    Par défaut
    Pouvez vous donner plus de détails sur le "ça n'a pas marché" ? Quel est l'erreur, qu'est ce que cela a fait. Quel est votre code actuel ... enfin tout ce que l'on peut avoir besoin pour vous aider.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  17. #17
    Membre expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mars 2011
    Messages
    576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2011
    Messages : 576
    Points : 1 528
    Points
    1 528
    Par défaut
    il y aurais pas quelque chose de plus simple pour effectuer ce maudit saut ?
    Téléporter le perso comme à l'époque des bons vieux game & watch
    La perfection est atteinte, non pas lorsqu’il n’y a plus rien à ajouter, mais lorsqu’il n’y a plus rien à retirer. - Antoine de Saint-Exupéry

  18. #18
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2012
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2012
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Bonjour, je suis tombé sur cette discussion en cherchant une façon de créer un saut

    Voici le code que j'utilise (il est en construction), j'utilise pascal

    If estenlair then begin
    vity:=vity-5;
    fy:=fy-vity;
    end
    else if fkeyz
    then begin
    vity:=50;
    fy:=fy-vity;
    end;
    (estenlair me dit si mon perso estenlair ou sur le sol, fy position du perso, vity sa vitesse en ordonnée, fkeyz si j'appuie sur z)

    Mon problème est que quand j'appuie sur z ca me monte direct l'image de quelques crans, je ne la voie monter progressivement. La descente se fait par contre correctement.

    Je n'ai pas d'idée pour créer une boucle pour la montée, et vous ? ou faudrait-il utiliser timer ? Si oui je n'ai pas trouvé de solution.
    Vous avez des idées ?

  19. #19
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 855
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 855
    Points : 218 548
    Points
    218 548
    Billets dans le blog
    118
    Par défaut
    Cela est brusque car l'accélération est brusque. Si vous voulez quelque chose de moins brusque alors il faudra augmenter la vitesse en y d'une manière progressive (au lieu de faire On peut imaginer quelque chose de ce genre :
    Code pascal : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if fkeyz
    then begin
    if vity < 10
      vity:=vity+1;
    (Je ne connais pas le pascal, donc le code peu ne pas compiler.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

Discussions similaires

  1. Problème de linkage SDL avec Builder 6 pro
    Par Invité dans le forum SDL
    Réponses: 5
    Dernier message: 28/04/2006, 02h44
  2. Probleme audio avec SDL
    Par fab101 dans le forum SDL
    Réponses: 5
    Dernier message: 17/03/2006, 17h31
  3. Problème execution programme SDL
    Par youp_db dans le forum SDL
    Réponses: 2
    Dernier message: 11/02/2006, 18h06
  4. Problème avec lib SDL
    Par Info-Rital dans le forum Linux
    Réponses: 8
    Dernier message: 02/07/2004, 20h59
  5. Probleme de compatibilité SDL (je crois!)
    Par SpaceMonkey dans le forum OpenGL
    Réponses: 5
    Dernier message: 11/06/2004, 15h10

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