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

Développement 2D, 3D et Jeux Discussion :

[2D] pb gravitation


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    411
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 411
    Points : 192
    Points
    192
    Par défaut [2D] pb gravitation
    salut,

    j'ai fait un thread pour faire tomber un objet situé au point (0,0).

    pour cela j'ai implémenté la fonction gravitation come suit :

    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
     
    int gravitation(void *unused)
    {
     float t=0;
     while(arrivee.y<400) // tant que l'objet n'est pas situé au point (0,400).
     {
      (double&)arrivee.y=(1/2)*9.85*pow(t,2); // y = (1/2)gt²
     
    t=t+0.001; // on incrémente t toutes les millisecondes secondes.
     
      SDL_Delay(1000); // on attend 1 seconde
     
    /* on rafraichi l'écran */
     
     
      SDL_FillRect(screen,NULL,0);
     
      SDL_BlitSurface(sprites,&depart,screen,&arrivee);
     
      SDL_Flip(screen);  
     
     }
    }
    malheureusement ca ne fonctionne pas...

    si par hasard vous aviez une idée ?

    merci

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    malheureusement ca ne fonctionne pas...
    Mézencore ?

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    411
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 411
    Points : 192
    Points
    192
    Par défaut
    bon alors rectificatif ca fonctionne maintenant mais... il faudrait faire en sorte que l'image tombe plus vite.

    Est-ce possible ???

    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
     
    int gravitation(void *unused)
    {
     
     float t=0;
     while(arrivee.y<400)
     {
      arrivee.y=0.5*9.85*pow(t,2);
      t=t+0.01;
    //  SDL_Delay(10);
      SDL_FillRect(screen,NULL,0);
      SDL_BlitSurface(sprites,&depart,screen,&arrivee);
      SDL_Flip(screen);  
     }
     
    }
    merci

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Augmente la gravité si tu veux que ton perso tombe plus vite.

    Remarque qui ne mange pas de pain : "t * t" sera toujours plus rapide que "pow(t, 2)".

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    411
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 411
    Points : 192
    Points
    192
    Par défaut
    merci !

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    411
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 411
    Points : 192
    Points
    192
    Par défaut
    Est-ce que vous savez comment faire sauter un personnage maintenant.

    sachant que la gravitation est un thread qui tourne tout le temps.

    merci

  7. #7
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Il suffit d'intégrer la vitesse et l'accélération à tes calculs. Cela signifie modifier ta formule pour ajouter ces deux composantes (me souviens plus de la formule, mais une petite recherche devrait te la donner).

    Puis, il suffit pour sauter de donner une vitesse initiale à ton entité.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    411
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 411
    Points : 192
    Points
    192
    Par défaut
    d'accord :

    la vitesse c'est :

    v = gt + v0

    l'accélération c'est :

    a= g

    mais je n'ai pas compris ce que tu voulais dire par intégrer ca a mes calculs ???

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    411
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 411
    Points : 192
    Points
    192
    Par défaut
    ya aussi autre chose ,

    si je fais ceci :

    y = 0.5 * g * t² + V0 * t,


    faire sauter mon image reviens à lui donner une vitesse V0 initiale, mais cela ne suffit pas car l'image va rester au sol.

  10. #10
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    My god, j'ai retrouvé mes cours de terminale .

    Donc, c'est très simple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    P = 1/2 * A * t² + V0 * t + P0
     
    P  = position courante
    A  = accélération
    V0 = vitesse initiale
    P0 = position initiale

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    411
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 411
    Points : 192
    Points
    192
    Par défaut
    oui merci pour les idées c'est sympa mais je ne sais toujours pas comment faire sauter mon image.

    ...

  12. #12
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Je te l'ai dit, il suffit normalement d'initialiser V0 avec une valeur correcte. Cela va faire partir ton perso vers le haut, puis lorsque suffisamment de temps sera écoulé, le premier terme (en t²) deviendra plus grand que le second (en t), ce qui fera redescendre ton personnage (n'oublie pas que la gravité (A dans ma formule) est le vecteur (0, -9.85)).

  13. #13
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    411
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 411
    Points : 192
    Points
    192
    Par défaut
    ok voici ma fonction saut,

    apparement l'objet monte en l'air mais il ne redescend pas

    ???

    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
     
    void saut()
    {
         vitesse=1;
         PO=415;
         float t=0;
     
     while(arrivee.y<500) // tant que l'objet n'est pas sur le sol
     {
     
      arrivee.y=-0.5*pow(t,2) + vitesse*t + PO;
      t=t+1; 
     
     
      SDL_Delay(100);
     
      //rafraichis l'écran
      SDL_FillRect(screen,NULL,0);
      SDL_BlitSurface(sprites,&depart,screen,&arrivee);
      SDL_Flip(screen);  
     
     }
     
    }
    [/code]

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    411
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 411
    Points : 192
    Points
    192
    Par défaut
    meme en incorporant la valeur de la pesenteur : 9.85

  15. #15
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Là encore relis ce que je t'ai dit :

    n'oublie pas que la gravité (A dans ma formule) est le vecteur (0, -9.85)
    La gravité est une force qui tire vers les Y négatifs. Donc, sans signe -, ton perso ne risque pas de redescendre

  16. #16
    Membre habitué
    Profil pro
    Inscrit en
    Août 2005
    Messages
    411
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Août 2005
    Messages : 411
    Points : 192
    Points
    192
    Par défaut
    oui j'ai bien vu que la gravitation c'est -9.85 mais j'avais mis le signe - dans mon code (voir plus haut).

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

Discussions similaires

  1. [Physique] Courber une tige sous la gravité
    Par Snark dans le forum Algorithmes et structures de données
    Réponses: 10
    Dernier message: 17/10/2006, 13h16
  2. Déterminer le centre de gravité
    Par gids01 dans le forum Algorithmes et structures de données
    Réponses: 16
    Dernier message: 09/10/2006, 09h40
  3. [SDL] gravité + colisions..
    Par youp_db dans le forum Développement 2D, 3D et Jeux
    Réponses: 3
    Dernier message: 01/02/2006, 07h51
  4. Erreur : 17883, Gravité : 1, État : 0
    Par jbat dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 25/11/2004, 14h19
  5. Rotation d'un rectangle autour du centre de gravité
    Par bucheron dans le forum Algorithmes et structures de données
    Réponses: 13
    Dernier message: 22/06/2004, 11h01

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