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 :

Freiner un objet


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    ok
    Inscrit en
    Octobre 2018
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : ok

    Informations forums :
    Inscription : Octobre 2018
    Messages : 39
    Par défaut Freiner un objet
    Bonjour,

    j'ai un petit jeu 2D ou en appuyant sur la touche droite je donne la vitesse x à un objet et la touche gauche -x. La vitesse est multiplié par 0.9 à chaque tour de boucle ce qui freine l'objet. Mais il y a un gros problème. A l'écran l'objet bouge plus longtemps si j'appuie sur gauche que sur droite. Comment ça se fait ?

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Bonjour,

    Si ta vitesse est un nombre entier, cela peut être dû à l'arrondi des entiers.
    Par exemple : -15 * 0.9 => -13.5 arrondi entier en -14, alors que +15 * 0.9 => 13.5 arrondi entier en 13 donc la vitesse diminuerait moins vite pour les nombres négatifs.

  3. #3
    Membre averti
    Homme Profil pro
    ok
    Inscrit en
    Octobre 2018
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : ok

    Informations forums :
    Inscription : Octobre 2018
    Messages : 39
    Par défaut
    C'est un float, si je le change en double ca donne la même...

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 147
    Billets dans le blog
    4
    Par défaut
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  5. #5
    Expert confirmé
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 599
    Par défaut
    Et ma boule de cristal a mal fonctionné, peut-être qu'avec le code on y verrait plus clair.

  6. #6
    Membre averti
    Homme Profil pro
    ok
    Inscrit en
    Octobre 2018
    Messages
    39
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : ok

    Informations forums :
    Inscription : Octobre 2018
    Messages : 39
    Par défaut
    Voici body.cpp

    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
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    #include "body.h"
     
    body::body() : m_vx(0), m_vy(0), m_leg(0), m_kick(0)
    {
        m_rectangle.x = 500;
        m_rectangle.y = 0;
        m_rectangle.w = 88;
        m_rectangle.h = 304;
    }
     
    body::~body()
    {
        //dtor
    }
     
    void body::load(SDL_Renderer *renderer)
    {
        m_surface3 = SDL_LoadBMP(kick);
        m_texture3 = SDL_CreateTextureFromSurface(renderer, m_surface3);
        m_surface2 = SDL_LoadBMP(jambe);
        m_texture2 = SDL_CreateTextureFromSurface(renderer, m_surface2);
        m_surface1 = SDL_LoadBMP(defaut);
        m_texture1 = SDL_CreateTextureFromSurface(renderer, m_surface1);
    }
     
    void body::affiche(SDL_Renderer *renderer)
    {
        if(m_leg)
        {
            m_rectangle.w = 169;
            SDL_RenderCopy(renderer, m_texture2, NULL, &m_rectangle);
        }
     
        else if(m_kick)
        {
            m_rectangle.w = 185;
            SDL_RenderCopy(renderer, m_texture3, NULL, &m_rectangle);
        }
     
     
        else
        {
            m_rectangle.w = 88;
            SDL_RenderCopy(renderer, m_texture1, NULL, &m_rectangle);
        }
     
     
     
    }
     
    void body::action(input touch)
    {
        if(touch.getTouchDown(SDL_SCANCODE_UP) && m_rectangle.y >= 420)
            m_vy += -20;
     
        if(touch.getTouchDown(SDL_SCANCODE_DOWN))
        {
     
        }
     
        if(touch.getTouchDown(SDL_SCANCODE_RIGHT))
            m_vx = 4;
     
        if(touch.getTouchDown(SDL_SCANCODE_LEFT))
            m_vx = -4;
     
        if(touch.getTouchDown(SDL_SCANCODE_C))
        {
            if(m_kick)
                m_kick = 0;
     
            else
                m_kick = 1;
        }
     
        if(touch.getTouchUp(SDL_SCANCODE_C))
            m_kick = 0;
     
        if(touch.getTouchUp(SDL_SCANCODE_RIGHT))
        {
     
        }
     
     
        if(touch.getTouchUp(SDL_SCANCODE_LEFT))
        {
     
        }
    }
     
    void body::dynamic()
    {
        m_rectangle.x += m_vx;
        m_rectangle.y += m_vy;
     
        if(m_rectangle.y >= 420)
        {
            m_vy = 0;
            m_rectangle.y = 420;
            m_leg = 0;
        }
     
        else
        {
            m_vy += 1;
     
            if(!m_kick)
                m_leg = 1;
     
            else
                m_leg = 0;
        }
     
        m_vx *= 0.99;
    }
     
    float body::location()
    {
        return m_location;
    }

Discussions similaires

  1. codage objet
    Par charly dans le forum Algorithmes et structures de données
    Réponses: 18
    Dernier message: 22/08/2002, 16h49
  2. algo : rotation d'objet 3d
    Par numeror dans le forum Algorithmes et structures de données
    Réponses: 4
    Dernier message: 19/08/2002, 22h58
  3. Importer des objets de 3dsMax
    Par Anonymous dans le forum OpenGL
    Réponses: 3
    Dernier message: 06/05/2002, 13h53
  4. Peux t'on créer une copie locale de l'objet partagé?
    Par Anonymous dans le forum CORBA
    Réponses: 8
    Dernier message: 16/04/2002, 16h20
  5. [Kylix] Erreur objet
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 22/03/2002, 09h41

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