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 :

[Farseer] Méthodologie pour les collisions


Sujet :

XNA/Monogame

  1. #1
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 83
    Points : 76
    Points
    76
    Par défaut [Farseer] Méthodologie pour les collisions
    Bonjour,

    Je réalise actuellement un jeu 2D à scrolling horizontal et je m'attaque à la partie physique du jeu. J'ai choisi d'utiliser FarseerPhysics comme moteur physique, que je commence doucement à prendre en main (j'ai jamais utiliser de moteur ni fait de physique avant).

    Mes questions concernent principalement le système de collision du personnage avec le sol.

    Mettons que je veuille réaliser un jeu dans ce genre la :
    [ame="http://www.youtube.com/watch?v=tSefPi8vpUc"]YouTube- Oboro Muramasa - Momohime gameplay (Shura mode)[/ame]
    ou encore :
    [ame="http://www.youtube.com/watch?v=tR7vE6l1MN0"]YouTube- Dust: An Elysian Tail - DreamBuildPlay'09 Teaser[/ame]

    Comment est géré le déplacement du personnage sur un terrain qui n'est pas forcément plat? Est-ce une poussée vectorielle de X force? Est-ce juste un déplacement (x,y)? Et les collisions, comment obtenir une telle fluidité de déplacement?
    En fait j'aimerai savoir comment gérer cette partie du jeu qui me pose actuellement souci.

    Merci pour votre aide !

  2. #2
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 83
    Points : 76
    Points
    76
    Par défaut
    Bon je travaille actuellement sur une solution mais j'ai un peu du mal à la mettre en place.
    Donc pour le déplacement du personnage sur un terrain vallonné, inégal, je tente de procéder ainsi :

    Admettons que je veux que mon personnage aille vers la droite, je vais utiliser la méthode de farseer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Rayhelper.LineSegmentGeomIntersect(Vector2 point1, Vector2 point2, Geom geom, bool detectUsingAABB, ref List<Vector2> intersectionPoints);
    • Point1 correspond à la position actuelle de mon personnage plus un offset, mettons {X + 1, Y + 1}
    • Point2 correspond à un point de même X que Point1 mais d'une valeur Y élevée (supérieur à la hauteur de l'écran) : par exemple -> new Vector2((monPerso.Position.X + 1), 900);
    • geom correspond à la géométrie de mon terrain


    Donc de la position simulée part une ligne verticale, il me reste à récupéré la liste des points d'intersections (intersectionPoints). Ensuite je fais une soustraction entre le point de collision, le point de simulation et l'offset pour obtenir la nouvelle position Y du personnage. Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    newPosY = offsetY + (simPos.Y - pointList[0].Y);
    Pour le moment je suis en phase de test, j'ai aucune idée de l'efficacité de cette technique donc on verra bien !

  3. #3
    Membre averti Avatar de yodaime
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    282
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 282
    Points : 340
    Points
    340
    Par défaut
    Tu utilise pharseer ?

    Pourquoi ne pas utiliser ce qui est fournit avec ?

    Tu créer le body et la geom de ton perso, celui de ton terrain et après tu laisse faire pharseer pour les collision.

    Pour faire bouger ton perso un petit ApplyImpulse sur le body ( ou la geom j'ai un doute) pour le faire bouger et hop !

  4. #4
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 83
    Points : 76
    Points
    76
    Par défaut
    Plop yodaime !

    Le problème c'est que je ne veux pas que mon personnage se déplace selon les lois de la physique (hormis quand il saute ou il faut lui appliquer la gravité). Je ne sais pas si tu comprend ce que je veux dire, c'est qu'il aura un déplacement constant, qu'il ne "glissera" pas dans une pente, qu'il sera toujours collé à elle.

    (cpas évident à expliquer, c'est pour ça que j'ai linker les vidéos au premier post)

  5. #5
    Membre averti Avatar de yodaime
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    282
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 282
    Points : 340
    Points
    340
    Par défaut
    Tu peux lui appliquer un deplacement constant en modifiiant la position du body a chaque update :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Body.Position += playerMove * (float)gameTime.ElapsedGameTime.TotalSeconds * 75;
    avec playerMove.X -= 1.0f ou playerMove.X -= 1.0f en fonction de la direction,
    playerMove un Vector2 et 75 pour définir la vitesse.

  6. #6
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 83
    Points : 76
    Points
    76
    Par défaut
    Le problème c'est pas le déplacement en X, le problème c'est comment trouver la nouvelle position Y en fonction du terrain (sachant que mon objet est "static" quand il est au sol).

    EDIT : En gros je veux pas que mon personnage ai l'air d'une balle qui "roule"

  7. #7
    Membre averti Avatar de yodaime
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2006
    Messages
    282
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2006
    Messages : 282
    Points : 340
    Points
    340
    Par défaut
    Tu a pas besoin de t'occuper de la position en Y, c'est pharseer qui gère au niveau des collisions.

  8. #8
    Membre régulier
    Inscrit en
    Août 2008
    Messages
    83
    Détails du profil
    Informations forums :
    Inscription : Août 2008
    Messages : 83
    Points : 76
    Points
    76
    Par défaut
    Bon finalement farseer était pas vraiment adapté à ce que j'essayai de faire. Du coup j'ai fait un ptit algo perso basé sur le Per-pixel collision et ça marche nikel !


Discussions similaires

  1. Problème pour les collisions avec la caméra
    Par Asmod_D dans le forum OpenSceneGraph
    Réponses: 4
    Dernier message: 19/02/2010, 09h30
  2. Meilleur event pour les collisions ?
    Par saturn1 dans le forum C#
    Réponses: 0
    Dernier message: 15/12/2009, 22h06
  3. Utilisation d'un fichiers OBJ pour les collisions
    Par Lynix dans le forum Physique
    Réponses: 2
    Dernier message: 09/07/2009, 16h28
  4. [Bullet] Callback pour les collisions
    Par razmott dans le forum Bullet
    Réponses: 2
    Dernier message: 28/03/2007, 11h42
  5. Méthodologie pour les tests
    Par Maitre B dans le forum Test
    Réponses: 7
    Dernier message: 10/03/2005, 17h57

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