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 :

Problème de gestion de collision


Sujet :

Développement 2D, 3D et Jeux

  1. #1
    Membre averti Avatar de _SamSoft_
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    798
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 798
    Points : 345
    Points
    345
    Par défaut Problème de gestion de collision
    Bonjour, avant tout, pour ceux qui se souviennent de moi (Projet "Life"), je voulais dire que Life v2 est sortie (voir ma signature). Je dis cela car j'avais des problèmes sur la gestion de collision et qu'ils ont été réglés par des membres de cette partie du forum. Merci à eux.

    Aujourd'hui, je suis sur un nouveau projet que j'ai bientôt finit (il me reste l'éditeur de map et la gestion de collision qui est à revoir).

    Voilà un code permettant de gérer la collision entre un robot et les autres robots de l'environnement :

    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
     
    int verification_of_position(robot **my_robot, int i, int nbr_of_robots)
    {
        robot *temp = NULL;
        int i2 = 0;
        signed error = -1;
     
        if(*my_robot != NULL)
        {
            temp = *my_robot;
     
            for(i2 = 0 ; i2 < nbr_of_robots ; i2++)
            {
                if((temp+i)->position.x > (temp+i2)->position.x && (temp+i)->position.x < (temp+i2)->position.x+SIZE_OF_CASE)
                {
                    error = 1;
                    if((temp+i)->position.y > (temp+i2)->position.y && (temp+i)->position.y < (temp+i2)->position.y+SIZE_OF_CASE)
                    {
                        error = 1; /* Collision possible */
                    }
                    else
                    {
                        error = 0;
                    }
                }
                else
                {
                    error = 0; /* aucune collision */
                }
            }
     
        }
        else
        {
            fprintf(stderr, "[verification_of_position] : my_robot == NULL\n");
            exit(EXIT_FAILURE);
        }
     
        return error;
    }
    Le problème c'est que quand un robot i rencontre un robot i2 sur l'écran, il lui marche dessus -_-

    Voilà un morceau de code (celui permettant de faire avancer un robot si sa position actuelle est UP, cela veut dire que le robot est tourné vers le haut) :

    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
     
    if((my_robot+i)->action_in_progress == MOVE_UP)
    {
        if((my_robot+i)->position_in_progress == UP)
        {
            if((my_robot+i)->position.y-1 != WALL && (my_robot+i)->position.y-1 > 0 && (my_robot+i)->position.y-1 != ROBOT) /* S'il n'y a pas de murs */
            {
                if((my_robot+i)->step < SIZE_OF_CASE)
                {
                    (my_robot+i)->position.y--;
                    if(verification_of_position(&my_robot, i, nbr_of_robots) == 0)
                    {
                        mapi[(my_robot+i)->position.x][(my_robot+i)->position.y] = BLANK;
                        (my_robot+i)->step++;
                        mapi[(my_robot+i)->position.x][(my_robot+i)->position.y] = ROBOT;
                    }
                    else
                    {
                        (my_robot+i)->position.y++;
                        (my_robot+i)->action_in_progress = NOTHING;
                        (my_robot+i)->step = 0;
                    }
                }
                else
                {
                    (my_robot+i)->action_in_progress = NOTHING;
                    (my_robot+i)->step = 0;
                }
            }
        }
    }
    Merci d'avance

    Ps: Pourquoi step ? Et bien c'est pour rendre plus fluide le mouvement. Je veux dire, le faire avancer "CASE par CASE" est pas super joli alors j'utilise step et on dirait vraiment qu'il roule, c'est la classe à l'écran

  2. #2
    Membre averti Avatar de _SamSoft_
    Profil pro
    Étudiant
    Inscrit en
    Février 2007
    Messages
    798
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2007
    Messages : 798
    Points : 345
    Points
    345
    Par défaut
    C'est bon, résolu. Je devais utiliser un tableau C'est bien mieux comme ca !

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

Discussions similaires

  1. [CS5] Problèmes de gestion de collisions en AS3
    Par Eshra dans le forum ActionScript 3
    Réponses: 10
    Dernier message: 14/12/2011, 17h01
  2. Problème de gestion de collision [encore]
    Par _SamSoft_ dans le forum SDL
    Réponses: 3
    Dernier message: 27/02/2008, 13h28
  3. Gros problème de gestion de collisions [C et SDL]
    Par _SamSoft_ dans le forum Développement 2D, 3D et Jeux
    Réponses: 13
    Dernier message: 06/12/2007, 14h09
  4. Problème gestion de collisions
    Par kaien dans le forum Physique
    Réponses: 6
    Dernier message: 31/01/2007, 16h31
  5. [TFrame] Problème de gestion du OnMouseDown avec une Frame
    Par xherault dans le forum Composants VCL
    Réponses: 5
    Dernier message: 23/05/2003, 16h35

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