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

XNA/Monogame Discussion :

Gestion des collisions 2D


Sujet :

XNA/Monogame

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 82
    Points : 60
    Points
    60
    Par défaut Gestion des collisions 2D
    Bonjour,

    J'essaye de gérer les collisions dans un RPG , l'espace de collision des personnages sont géré par un cercle et celles des décors avec un rectangle.
    J'utilise la méthode Intersects entre le rectangle du décor et celui qui entoure le cercle du perso.

    Pour affiner la collision j'ai tenté d'utiliser une collision par pixel "CollisionPerPixels" mais avec des sprites trop grand cela ralenti fortement le programme.

    Y'a t'il d'autre moyen pour gérer les collision en 2D.
    Y'a t'il d'autre forme que le rectangle ou suis je obligé de décomposer mes décors en plusieurs rectangles.

  2. #2
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Bonjour,

    Citation Envoyé par Julien666 Voir le message
    l'espace de collision des personnages sont géré par un cercle et celles des décors avec un rectangle.
    Pourquoi ne pas mettre les personnages dans des boites ? Cela légèrement moins rapide, mais plus précis.
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 82
    Points : 60
    Points
    60
    Par défaut
    tu veut dire quoi par des boites ?

  4. #4
    Membre actif
    Avatar de Mikmacer
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2006
    Messages
    116
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mars 2006
    Messages : 116
    Points : 241
    Points
    241
    Par défaut
    Est-ce que tu utilisé un partitionnemet de scène, exemple: une grille ou un octree?

    La détection par pixel peut-être employable sur plusieurs objets avec une performance respectable, si bien implémenté, tant qu'il n'y a pas un nombre excessif d'objets.

    Sinon, l'autre alternative est de composer les entités collisionables en AABB(Boîte alignée sur les axes XYZ), OBB(Boîte orienté) et sphères. Cette approximation fait très bien, c'est ce qui est le plus utilisé dans les jeux 2D/3D.

    Une autre alternative, qui pourrait très bien être utilisé pour les décors entre autre, est de de programmer un système de détection de collisions avec les polygones. Il existe plusieurs tutoriel sur le net, sinon il doit surement exister des moteurs de détection de collision 2D pour XNA(Un moteur physique pourrait le faire).

  5. #5
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Citation Envoyé par Julien666 Voir le message
    tu veut dire quoi par des boites ?
    Des rectangle (Bounding Box)
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  6. #6
    Inactif  

    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    166
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 166
    Points : 332
    Points
    332
    Par défaut
    les algos de collision dépendent entièrement de la façon dont sont encodées les maps

    pour les jeux 2d le plus simple c'est le bon vieux classique de la grille (une collisionmap en grille de boléens, qui coincide avec un affichage en tile-map)

    sinon la technique plus moderne c'est l'approche object-based avec des proxy de collision, des formes simplifiées pour chaque type d'objet, genre des cercles, des polygones convexes, des box, etc

    aucune des deux approches n'est facile.
    pour la première approche tu vas devoir trouver une méthode pour convertir tous tes objets en tuiles
    pour la seconde tu vas devoir te taper une tonne de formules de collision différentes et stocker tes objets dans une grille pour optimiser tout ça
    pour voir à quoi ressemble un projet amateur qui a réussi: http://www.advsys.net/ken/build.htm

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 82
    Points : 60
    Points
    60
    Par défaut
    Mon jeu ce dessine en trois couches,
    - la première est la Mapp de type tuile que j'utilise pour dessiner le terrain (herbe, eau, terre) et décors qui remplissent la tuile entièrement.
    les collisions sont géré par des rectangles tous simplement.

    - la seconde pour les décors (arbres , murs , habitations) , ils sont tous de tailles différentes.
    les collisions sont aussi géré par des rectangles mais qui ne représentent pas la taille de la texture contrairement aux tuiles.

    En faite je voulais juste affiner les collisions des décors au pixel près mais cela ralenti le programme dés que l'image est trop importante.

    Le problème c'est que je ne trouve pas d'autre forme que le rectangle dans xna avec des cercles ou des triangles qui aurai pu rendre les collisions plus précise.
    peut être qu'il faut définirent ces formes soit même et surtout les méthode d'intersections entre les formes car c'est cela l'essentiel.

    - la troisième couche sont les personnages (ou plutôt tous ce qui est mobile).

  8. #8
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Je ne vois toujours pas pourquoi les rectangles ne vous suffisent pas.

    Habituellement, si on veut des collisions plus precises ont utilise un ensemble de rectangle (selon les membres du corps des personnages par exemple).

    La sphere (ou le cercle en 2D) donnent des collisions moins precises.

    Sinon, il faut utiliser un partionnement de l'espace pour ne pas verifier vos 100000 objets entre eux
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 82
    Points : 60
    Points
    60
    Par défaut
    Habituellement, si on veut des collisions plus precises ont utilise un ensemble de rectangle (selon les membres du corps des personnages par exemple).
    pour cela il faudrait que l'on puisse incliner les rectangles, mais je n'ai vu cela nul part dans xna , les rectangles sont tous parallèles à l'écran.

    en 3D il ya 3 classes, une pour les cubes une les sphères et une les pyramides.
    En 2D il n'ya que les rectangle

  10. #10
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Citation Envoyé par Julien666 Voir le message
    pour cela il faudrait que l'on puisse incliner les rectangles, mais je n'ai vu cela nul part dans xna , les rectangles sont tous parallèles à l'écran.
    Effectivement, mais en meme temps, un rectangle est une forme 2D ... donc l'incliner voudrez dire qu'il est dans un monde 3D.
    Peut etre que vous pouvez faire en sorte que le rectangle corresponde mieux a votre cas en modifiant sa taille.
    Avec vous une capture d'ecran pour expliquer precisement votre probleme ? (si possible, en montrant les rectangles)
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 82
    Points : 60
    Points
    60
    Par défaut
    si on prend un rectangle et qu'on le fait tourner au tour de l'axe Z il reste en 2D,
    d'ailleur c'est ce que l'on fait souvent avec les texture.

  12. #12
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2002
    Messages
    255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2002
    Messages : 255
    Points : 445
    Points
    445
    Par défaut
    Salut Julien666,

    Ton post s'intitule "Gestion des collisions 2D" donc je ne comprend pas pourquoi on parle d'axe Z qui correspond à une profondeur.
    Pour la gestion des collisions 2D utilise un moteur physique comme Farseer, il est optimisé et l'implémentation est très simple.
    Dans Farseer il n'y a pas que des cercles et des rectangles il y a aussi des ellipses, capsules etc...

    Salutations.

  13. #13
    Responsable 2D/3D/Jeux


    Avatar de LittleWhite
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2008
    Messages
    26 859
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Mai 2008
    Messages : 26 859
    Points : 218 580
    Points
    218 580
    Billets dans le blog
    120
    Par défaut
    Pour des rectangle tournés, il faut utiliser une technique un peu plus compliqué (que les simple rectangle alignés avec les axes). Cela s'appelle (du moins pour la 3D) Oriented Object Bounding Boxes (OOBB) (ou un truc très proche). Il faut juste faire des proportions sur les axes x / et y puis appliquer l'angle (ou alors, tout mettre sur le meme axe)
    Vous souhaitez participer à la rubrique 2D/3D/Jeux ? Contactez-moi

    Ma page sur DVP
    Mon Portfolio

    Qui connaît l'erreur, connaît la solution.

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    82
    Détails du profil
    Informations personnelles :
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 82
    Points : 60
    Points
    60
    Par défaut
    Ton post s'intitule "Gestion des collisions 2D" donc je ne comprend pas pourquoi on parle d'axe Z qui correspond à une profondeur.
    Que te dire de plus que tout ce qui tourne dans un plan en 2D tourne autour d'un axe z.

    Pour la gestion des collisions 2D utilise un moteur physique comme Farseer, il est optimisé et l'implémentation est très simple.
    Dans Farseer il n'y a pas que des cercles et des rectangles il y a aussi des ellipses, capsules etc...
    Effectivement cela reste je pense la meilleur solution , mais je trouve cela un peu disproportionné d'utiliser un moteur physique juste pour affiner des collision, je fait un RPG pas un jeux arcarde, je crois que je vais me contenter de collions avec des rectangles.

Discussions similaires

  1. gestion des collisions avec sdl
    Par kirtap1969 dans le forum SDL
    Réponses: 3
    Dernier message: 18/10/2007, 21h16
  2. Hashtable et gestion des collisions
    Par nicoland dans le forum Framework .NET
    Réponses: 3
    Dernier message: 21/05/2007, 12h28
  3. [FLASH 8] Gestion des collisions
    Par celinha dans le forum Flash
    Réponses: 12
    Dernier message: 23/06/2006, 11h15
  4. Importer avec Ogre / Gestion des collisions
    Par alex6891 dans le forum Ogre
    Réponses: 9
    Dernier message: 19/02/2006, 17h43
  5. Gestion des collisions - terrains
    Par Dranor dans le forum DirectX
    Réponses: 1
    Dernier message: 26/06/2003, 18h50

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