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 :

Objets qui se suivent en SDL


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2014
    Messages : 12
    Par défaut Objets qui se suivent en SDL
    Bonjour je suis en train de coder un snake et je me confronte au problème suivant lorsque je change rapidement de direction ( voir l'image).

    Nom : probleme snake.png
Affichages : 117
Taille : 3,3 Ko

    Pourtant j'utilise une fonction qui ,pour déplacer chaque parties du corps, récupère les positions de la parties précédentes. Voici la dite fonction :

    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
    for(int unsigned i = 1; i < coordonneePosition.size(); i++)
        {
            switch(direction)
            {
            case 0:
                if(coordonneePosition[i].y > coordonneePosition[i-1].y)
                {
                    coordonneePosition[i].y--;
                }
                if(coordonneePosition[i].y < coordonneePosition[i-1].y)
                {
                    coordonneePosition[i].y++;
                }
                 if(coordonneePosition[i].y == coordonneePosition[i-1].y)
                 {
                      coordonneePosition[i].x = coordonneePosition[i-1].x + 25;
                 }
     
                break;
            case 1:
                 if(coordonneePosition[i].y > coordonneePosition[i-1].y)
                {
                    coordonneePosition[i].y--;
                }
                if(coordonneePosition[i].y < coordonneePosition[i-1].y)
                {
                    coordonneePosition[i].y++;
                }
                 if(coordonneePosition[i].y == coordonneePosition[i-1].y)
                 {
                      coordonneePosition[i].x = coordonneePosition[i-1].x - 25;
                 }
                break;
            case 2:
                  if(coordonneePosition[i].x > coordonneePosition[i-1].x)
                {
                    coordonneePosition[i].x--;
                }
                if(coordonneePosition[i].x < coordonneePosition[i-1].x)
                {
                    coordonneePosition[i].x++;
                }
                 if(coordonneePosition[i].x == coordonneePosition[i-1].x)
                 {
                      coordonneePosition[i].y = coordonneePosition[i-1].y + 25;
                 }
                break;
            case 3:
                 if(coordonneePosition[i].x > coordonneePosition[i-1].x)
                {
                    coordonneePosition[i].x--;
                }
                if(coordonneePosition[i].x < coordonneePosition[i-1].x)
                {
                    coordonneePosition[i].x++;
                }
                 if(coordonneePosition[i].x == coordonneePosition[i-1].x)
                 {
                      coordonneePosition[i].y = coordonneePosition[i-1].y - 25;
                 }
                break;
     
            }
        }
    Pouvez vous m'indiquez l'erreur de mon idée ??

    D'avance merci.

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 151
    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 151
    Billets dans le blog
    4
    Par défaut
    Salut,

    tu devrais plutot chercher l'erreur dans le changement de direction que le suivi des objets. Ils se suivent correctement, ton screenshot le montre bien.
    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.

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2014
    Messages : 12
    Par défaut
    Il n'y as pas de soucis avec la direction c'est juste le fait que comme la tete est en mouvement permanent le corps ne suit pas le chemin que la tête a décris, il cherche la trajectoire la plus courte !

  4. #4
    Membre Expert
    Avatar de skeud
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2011
    Messages
    1 091
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2011
    Messages : 1 091
    Billets dans le blog
    1
    Par défaut
    Pour ton switch, je suppose que tu utilise la direction de la tête, ça ne serait pas plutôt la direction de la partie précédente que tu devrais utiliser?
    sinon une solution plus élégante serait de faire une liste chainée de tes maillon, ça serait plus simple pour toi....

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2014
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2014
    Messages : 12
    Par défaut
    D'accord merci, je vais tout d'abord essayer de travailler avec la direction de chaque parties et si je bloque encore je me mettrais aux listes chaînées !

  6. #6
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    L'avantage de la liste, c'est que le "déplacement" consiste à rajouter un maillon en tête, et retirer le dernier.

    Tu as surement constaté que visuellement, les maillons intermédiaires ne se déplacent pas.

    D'ailleurs, en déplacement normal, tu n'auras pas forcément d'allocation mémoire, il suffit de procéder ainsi:
    1. défaire le lien entre l'avant dernier maillon et le dernier.
    2. modifier les coordonnées de "dernier" pour le mettre à la nouvelle position de la tête
    3. lier le premier maillon comme suivant du "dernier".
    4. considérer que la tête de la liste est "dernier".


    Et l'augmentation de taille sera encore plus simple:
    1. créer un nouveau maillon à la nouvelle position de la tête
    2. lier le premier maillon comme suivant du "nouveau".
    3. considérer que la tête de la liste est "nouveau".
    4. ne pas déplacer le vers ce tour-ci, c'est déjà fait.


    Ceci n'est pas vrai si les maillons ont chacun une texture unique, et stockée dedans.
    Mais ce serait une erreur, il vaut mieux avoir une liste de texture autonome, que tu parcours en parallèle pendant le dessin.
    En effet, les données d'affichage doivent être détachée de la logique du jeu.

Discussions similaires

  1. [POO] récupérer l'id d'un objet qui a le focus.
    Par chateau64 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 15/05/2008, 10h43
  2. Réponses: 2
    Dernier message: 21/04/2006, 14h32
  3. Récupérer l'objet qui a le focus
    Par Johnbob dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 20/01/2006, 14h40
  4. [AWK] récupération de lignes qui se suivent
    Par PtiNico dans le forum Linux
    Réponses: 2
    Dernier message: 12/04/2005, 19h44
  5. Réponses: 19
    Dernier message: 07/11/2003, 08h10

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