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 :
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 :
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 !
Partager