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 :

[SDL] Gestion des sauts


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 7
    Points : 2
    Points
    2
    Par défaut [SDL] Gestion des sauts
    Bonjour, je sais qu'il y a de nombreux post sur ce sujet mais j'ai comme même décidé d'en créer un...

    je fais un petit mario et j'ai recontré quelques problèmes au niveau des sauts.
    J'ai réussi à le faire sauter sur place:

    une variable contient l'amplitude que l'on diminue a chaque tour ce qui permet d'avoir un saut progressif.


    position.y = position.y - ecartSaut;
    //50 + (-1) : fait descendre le perso

    ecartSaut -= 1;


    Mais, lorsque je veux sauter et avancer pour faire un bond en avant, mon perso se met à marcher dans les airs...

    De plus, j'ai quelques problèmes avec la gestion de mes collisions.
    Imaginons qu'il y est un bloc de pierre devant moi, lorsque je saute et j'avance pour monter dessus, il y a un petit decallage entre le dessus du bloc et les pieds de mon perso.
    Parfois, mon perso traverse meme mes blocs.



    Voici mon projet entier

    Merci d'avance pour votre aide.

  2. #2
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par Splinter_7
    Mais, lorsque je veux sauter et avancer pour faire un bond en avant, mon perso se met à marcher dans les airs...
    Cela dépend comment tu as programmé le tout.

    Je vois ceci dans ton 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
                    switch(event.key.keysym.sym)
                    {
                        case SDLK_RIGHT:
                            if((Mario->getDirection() != "right")&&(Mario->getDirection() != "dead"))
                            {
                                Mario->initEcart();
                                Mario->setDirection("right");
                                Mario->updateKey(true);
                            }  
                            break;
     
                        case SDLK_DOWN:
                            if((Mario->getDirection() != "up")&&(Mario->getDirection()  != "dead"))
                            {
                                Mario->setDirection("down");
                                Mario->updateKey(true);
                            }
                            else
                                Mario->setPosition(Mario->getPositionX(), Mario->getPositionY()+10);
     
                            Mario->initEcart();
                            break;
     
                        case SDLK_UP:
                            if((Mario->getDirection() != "up")&&(Mario->getDirection() != "dead"))
                            {
                                Mario->setDirection("up");
                                Mario->updateKey(false);
                            }
                            break;
                    }
    C'est trop primitif et cela va effectivement rendre ta vie plus difficile. Premièrement, ce n'est pas une vue très objet. Il vaudrait mieux juste donner au personnage la direction voulu et le laisser en interne se battre avec ses propres démons. Ce code n'a rien à faire dans ton main...

    Ensuite, en interne, il vaut mieux juste avoir une vitesse verticale et horizontale. L'horizontale nous dit si le personnage va de gauche à droite et verticale s'il est dans les airs ou non.

    Ceci nous permet de simplifier ton problème :
    - Si la vitesse verticale est nul, il marche/cours
    - Sinon il est dans les airs.

    A chaque test de collision, tu vérifies s'il est sur un bloc et tu mets la vitesse verticale à 0 pour bien dire "maintenant je suis sur un bloc".

    De plus, j'ai quelques problèmes avec la gestion de mes collisions.
    Imaginons qu'il y est un bloc de pierre devant moi, lorsque je saute et j'avance pour monter dessus, il y a un petit decallage entre le dessus du bloc et les pieds de mon perso.
    Passe à du pixel perfect ou alors modifie ton code pour que la collision soit détecté au bon moment.

    Parfois, mon perso traverse meme mes blocs.
    Gestion de collision trop simpliste. Soit tes tests sont faux et du coup il y a un bug, soit tes tests sont faux.

    Dans ton code, je remarque qu'il n'y a aucun tests sur les retours des fonctions SDL, il faut les mettre.

    Jc

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Merci d'avoir répondu si vite déja...
    et qu'entends tu par tester ce que les fonctions SDL retourne...

    De plus, comment gérer mes évements autrement ..... Tu veux dire laisser mes "case" et envoyer juste ma direction à mon objet perso ?

  4. #4
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Citation Envoyé par Splinter_7
    Merci d'avoir répondu si vite déja...
    et qu'entends tu par tester ce que les fonctions SDL retourne...
    SDL_Init, SetVideoMode, TTF_OpenFont... Il faut tester le retour des fonctions...

    De plus, comment gérer mes évements autrement ..... Tu veux dire laisser mes "case" et envoyer juste ma direction à mon objet perso ?[/QUOTE]

    Oui et dans la classe qui gère ton mario tu fais tout le code qui se trouve dans le main...

    Jc

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 7
    Points : 2
    Points
    2
    Par défaut
    Ok je vais travailler sur sa.

    En tout cas je te remercie pour tes infos , si je bloque je reviens . Merci encore...

Discussions similaires

  1. [iText] Gestion des sauts de pages.
    Par schtroumpf_farceur dans le forum Documents
    Réponses: 12
    Dernier message: 02/03/2016, 10h18
  2. Gestion des sauts de lignes et balises <ul>
    Par fpouget dans le forum Langage
    Réponses: 1
    Dernier message: 08/10/2009, 22h37
  3. [phpToPDF] Gestion des sauts de page
    Par Christophe Charron dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 18/06/2008, 14h02
  4. [SDL] Gestion du saut
    Par john93 dans le forum SDL
    Réponses: 8
    Dernier message: 16/05/2008, 15h53
  5. [SDL] Gestion des touches claviers problématique
    Par Invité4 dans le forum SDL
    Réponses: 3
    Dernier message: 13/10/2006, 21h15

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