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

Physique Discussion :

Problème avec la détection de collision


Sujet :

Physique

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 12
    Points : 8
    Points
    8
    Par défaut Problème avec la détection de collision
    J'essaie de me faire une méthode pour la détection de collision dans mon jeu et je vois quelques petits problèmes. Ma méthode fonctionnent parfaitement mais je vois 2 'failles' et j'aimerais avoir quelques suggestions.

    Premièrement, si je veux faire déplacé le personnage sur une pente, je vais avoir plusieurs problèmes avec cette méthode car je devrait ajouter un rect pour les jambes et déplacer le y du perso en conséquence lorsque le y de l'ostacle (de ce cas la pente) diviser par la vitesse est plus petit ou égale a 1.

    Deuxièmement, dans mon stage de debug avec quelques enemis et quelques plates-formes, le taux de FPS est très haut, mais dans un stage avec un sol a plusieur niveau, plusieurs plate-formes et plusieurs enemis qui doivent aussi intéragir avec ses obstacles, le taux de FPS en serait vraiment affecté, surtout sur un ordinateur moin performant.

    Un troisième pourrait être le fait que si le joueur va trop vite, il pourrait passé en travers d'un mur, mais vu qu'il est impossible pour le joueurs d'allé si vite et que je n'ai aucun murs de 1 pixels, se problème ne me concerne pas vraiment.

    Cette méthode est utilisé seulement pour les contacts des objects avec les obstacles contre les murs, les plate-formes ou le sol, j'utilise une méthode différence pour la détection des balles, vu qu'elles intéragisse différament dans le contexte de mon jeu.

    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
    // dir : 1 = up, 2 = left, 3 = right, 4 = down
    int collision(int mX, int mY, int mH, int mW, int speed, int dir){
     
        for (int i = 0; i < 4; i++){
            if(dir == 1){
                if( mX + mW > blocs[ i ].x && mX < blocs[ i ].x + blocs[ i ].w ){
                    if( mY + speed < blocs[ i ].y + blocs[ i ].h && mY + mH + speed > blocs[ i ].y ){
                        return blocs[ i ].y + blocs[ i ].h;
                    }
                }
            }
            else if(dir == 2){
                if( mY + mH > blocs[ i ].y && mY < blocs[ i ].y + blocs[ i ].h ){
                    if( mX + speed < blocs[ i ].x + blocs[ i ].w && mX + mW + speed > blocs[ i ].x ){
                        return blocs[ i ].x + blocs[ i ].w;
                    }
                }
            }
            else if(dir == 3){
                if( mY + mH > blocs[ i ].y && mY < blocs[ i ].y + blocs[ i ].h ){
                    if( mX + speed < blocs[ i ].x + blocs[ i ].w && mX + mW + speed > blocs[ i ].x ){
                        return blocs[ i ].x - mW;
                    }
                }
            }
            else if(dir == 4){
                if( mX + mW > blocs[ i ].x && mX < blocs[ i ].x + blocs[ i ].w ){
                    if( mY + speed < blocs[ i ].y + blocs[ i ].h && mY + mH + speed > blocs[ i ].y ){
                        return blocs[ i ].y - mH;
                    }
                }
            }
        }
     
        return -1;
    }
    Tout mes obstacles sont inclus dans le tableau de blocs. La valeur de retour consiste au x (ou y) ou le perso doit arreter pour ne pas être dans le mur. Donc si le mur est a 10, le perso a 6 et la vitesse est de 5, la méthode retourne 10. Si elle retourne -1, tout se passe bien, évidament. J'utilisais un case avant, mais je l'ai changé car j'ai eu un problème qui n'était pas lié à ça du tout finalement.

    Quels que conseils seraient appréciés.

  2. #2
    Membre actif Avatar de SKone
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2004
    Messages
    333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2004
    Messages : 333
    Points : 250
    Points
    250
    Par défaut
    Je n'est pas vraiment compris tous t'es problème (commente ton code). Mais en ce qui concerne ta chute de fps ta pensé à une subdivision de l'espace ?

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 12
    Points : 8
    Points
    8
    Par défaut
    J'utilise la subdivision de l'écran pour les projectiles, pour que ceux qui sortent de l'écran disparaissent au lieu de continuer à l'infini, mais pour les enemis, si je subdivise l'écran, ils ne pourront pas bouger lorsqu'ils sont à l'extérieur de l'écran ce qui serait une façon trop facile de tricher contre les enemies plus lents.

    Quoique je pourrais faire une subdivision pour chaque enemis. J'utilise pour l'instant un screenX pour subdiviser l'écran dans le realX, je vais essayer de donner un screenX à mes objets enemis et voir si je peux faire la détection seulement dans l'écran de chaques enemis.

  4. #4
    Candidat au Club
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    9
    Détails du profil
    Informations personnelles :
    Âge : 32
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Pour ma part, pour subdivisé mon écran, je prend deux fois sa taille en hauteur et en largeur (j'appelle ça la zone de jeu), et dans cette zone, je contrôle les monstres. Lorsqu'ils sorte de cette zone, celà veut dire qu'ils sont trop éloignés, ils sont donc "supprimés".

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    J'ai une question comment tu fais pour supprimé et remettre les monstre. j'aimerai faire pareil avec une balle que je tire.

Discussions similaires

  1. [strncmp] Problème avec détection de caractère '
    Par Henwiro dans le forum MATLAB
    Réponses: 2
    Dernier message: 29/03/2012, 10h33
  2. Problème avec le node des collisions.
    Par razonback dans le forum Irrlicht
    Réponses: 1
    Dernier message: 07/07/2010, 12h37
  3. Problème de détection de collisions
    Par Myth_Titans dans le forum Ogre
    Réponses: 16
    Dernier message: 26/06/2008, 02h49
  4. détection de collision avec getpixel ?
    Par megaben dans le forum VB.NET
    Réponses: 9
    Dernier message: 30/09/2007, 20h54
  5. Réponses: 3
    Dernier message: 06/12/2006, 10h01

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