Précédent   Forum du club des développeurs et IT Pro > Applications > Développement 2D, 3D et Jeux > API graphiques > SDL
SDL Forum d'entraide sur l'API SDL. Avant de poster -> FAQ SDL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 23/04/2012, 20h24   #1
dazwy
Candidat au titre de Membre du Club
 
Inscription : décembre 2010
Messages : 60
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 60
Points : 12
Points : 12
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 .
dazwy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/04/2012, 08h15   #2
LittleWhite
Responsable 2D/3D/Jeux


 
Avatar de LittleWhite
 
Homme Alexandre Laurent
Ingénieur développement logiciels
Inscription : mai 2008
Messages : 10 381
Détails du profil
Informations personnelles :
Nom : Homme Alexandre Laurent
Localisation : France

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

Informations forums :
Inscription : mai 2008
Messages : 10 381
Points : 39 576
Points : 39 576
Bonjour,

Une solution simple ? Pendant l'état de saut, vous faites :
Citation:
hauteurDuPerso += vitesseSaut
Et une fois, lorsque vous le voulez, vous le faites chuter :
Citation:
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 :
Citation:
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
La rubrique a aussi un blog !

Ma page sur DVP
Mon Portfolio

Qui connaît l'erreur, connaît la solution.
LittleWhite est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 24/04/2012, 08h33   #3
pyros
Membre Expert
 
Homme
Inscription : mars 2011
Messages : 531
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mars 2011
Messages : 531
Points : 1 042
Points : 1 042
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 :
Citation:
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:
Citation:
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
pyros est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 05/05/2012, 21h16   #4
dazwy
Candidat au titre de Membre du Club
 
Inscription : décembre 2010
Messages : 60
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 60
Points : 12
Points : 12
Merci pour le conseil, je tacherais d'essayer cette technique et je vous informe sur les difficultés .
dazwy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2012, 03h07   #5
dazwy
Candidat au titre de Membre du Club
 
Inscription : décembre 2010
Messages : 60
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 60
Points : 12
Points : 12
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
dazwy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/05/2012, 12h54   #6
LittleWhite
Responsable 2D/3D/Jeux


 
Avatar de LittleWhite
 
Homme Alexandre Laurent
Ingénieur développement logiciels
Inscription : mai 2008
Messages : 10 381
Détails du profil
Informations personnelles :
Nom : Homme Alexandre Laurent
Localisation : France

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

Informations forums :
Inscription : mai 2008
Messages : 10 381
Points : 39 576
Points : 39 576
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
La rubrique a aussi un blog !

Ma page sur DVP
Mon Portfolio

Qui connaît l'erreur, connaît la solution.
LittleWhite est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 12/05/2012, 17h09   #7
dazwy
Candidat au titre de Membre du Club
 
Inscription : décembre 2010
Messages : 60
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 60
Points : 12
Points : 12
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 :
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;
        }
    }
 
}
dazwy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2012, 19h17   #8
Dono_S
Nouveau Membre du Club
 
Inscription : avril 2012
Messages : 16
Détails du profil
Informations forums :
Inscription : avril 2012
Messages : 16
Points : 32
Points : 32
Une solution très simple et vraiment efficace à mettre en place avec du code fait vite fait :

Code :
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
Dono_S est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 12/05/2012, 21h00   #9
dazwy
Candidat au titre de Membre du Club
 
Inscription : décembre 2010
Messages : 60
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 60
Points : 12
Points : 12
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 :
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 .
dazwy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/05/2012, 23h10   #10
Dono_S
Nouveau Membre du Club
 
Inscription : avril 2012
Messages : 16
Détails du profil
Informations forums :
Inscription : avril 2012
Messages : 16
Points : 32
Points : 32
Citation:
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 :
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)
Dono_S est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 13/05/2012, 00h06   #11
dazwy
Candidat au titre de Membre du Club
 
Inscription : décembre 2010
Messages : 60
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 60
Points : 12
Points : 12
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 !
dazwy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2012, 00h40   #12
dazwy
Candidat au titre de Membre du Club
 
Inscription : décembre 2010
Messages : 60
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 60
Points : 12
Points : 12
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 :
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
dazwy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2012, 15h28   #13
Dono_S
Nouveau Membre du Club
 
Inscription : avril 2012
Messages : 16
Détails du profil
Informations forums :
Inscription : avril 2012
Messages : 16
Points : 32
Points : 32
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 à développer et pour participer au Zéro Awards du Site du zéro (c'est d'ailleurs le projet gagnant ). Je met le code source ici à disposition de tout le monde, petit cadeau pour la communauté de developpez.com en gros
Fichiers attachés
Type de fichier : zip Smash 2D - Awards 2007.zip (1,67 Mo, 11 affichages)
Dono_S est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/05/2012, 21h08   #14
dazwy
Candidat au titre de Membre du Club
 
Inscription : décembre 2010
Messages : 60
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 60
Points : 12
Points : 12
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 à développer et pour participer au Zéro Awards du Site du zéro (c'est d'ailleurs le projet gagnant ). 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)
dazwy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/05/2012, 01h04   #15
dazwy
Candidat au titre de Membre du Club
 
Inscription : décembre 2010
Messages : 60
Détails du profil
Informations forums :
Inscription : décembre 2010
Messages : 60
Points : 12
Points : 12
Svp ça n'a pas marché, il y aurais pas quelque chose de plus simple pour effectuer ce maudit saut ?
dazwy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/05/2012, 09h54   #16
LittleWhite
Responsable 2D/3D/Jeux


 
Avatar de LittleWhite
 
Homme Alexandre Laurent
Ingénieur développement logiciels
Inscription : mai 2008
Messages : 10 381
Détails du profil
Informations personnelles :
Nom : Homme Alexandre Laurent
Localisation : France

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

Informations forums :
Inscription : mai 2008
Messages : 10 381
Points : 39 576
Points : 39 576
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
La rubrique a aussi un blog !

Ma page sur DVP
Mon Portfolio

Qui connaît l'erreur, connaît la solution.
LittleWhite est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/05/2012, 08h45   #17
pyros
Membre Expert
 
Homme
Inscription : mars 2011
Messages : 531
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations forums :
Inscription : mars 2011
Messages : 531
Points : 1 042
Points : 1 042
Citation:
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
pyros est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2012, 17h41   #18
Cariboubou
Invité de passage
 
Inscription : mai 2012
Messages : 4
Détails du profil
Informations forums :
Inscription : mai 2012
Messages : 4
Points : 2
Points : 2
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

Citation:
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 ?
Cariboubou est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/05/2012, 18h30   #19
LittleWhite
Responsable 2D/3D/Jeux


 
Avatar de LittleWhite
 
Homme Alexandre Laurent
Ingénieur développement logiciels
Inscription : mai 2008
Messages : 10 381
Détails du profil
Informations personnelles :
Nom : Homme Alexandre Laurent
Localisation : France

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

Informations forums :
Inscription : mai 2008
Messages : 10 381
Points : 39 576
Points : 39 576
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 :
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
La rubrique a aussi un blog !

Ma page sur DVP
Mon Portfolio

Qui connaît l'erreur, connaît la solution.
LittleWhite est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 20h20.


 
 
 
 
Partenaires

Hébergement Web