Bonjour,
je bosse actuellement sur un platformer, et je suis confronté a un soucis, je n'ai pas les compétences requises pour implémenter un élément physique important dans le gameplay du jeu.
Il s'agit d'une corde/grapin, et je cherche a avoir un rendu proche de worms (donc collisions entre la corde et les décors) mais avec une corde plus souple (comme dans final ninja pour ceux qui connaissent).

Je suis donc confronté a 2 soucis. Déjà niveau algorithmique je n'arrive pas a définir toutes les étapes, ensuite mathématiquement mes connaissances sont un peu limitées...


Déjà, sur quel système s'appuyer? Pendulum|Spring? Sachant que mon moteur physique est basé sur la velocité de mon objet (et pas seulement ses coordonnées)... Final ninja utilise un système de spring d'après son auteur.


Après le système en lui même j'ai fait des essais et je bloque sur la contrainte qui lie la corde au personnage, et donc l’empêche de s'allonger.
Par exemple mon perso est accroché a un point de coordonnées (cx, cy).

J'ai essayé ceci mais ça donne un effet élastique indésirable:
Code:
x et y => position personnage
cx et cy => point d'accroche de la corde
rope_len => taille max de la corde

if(constraint)
{
    dx = x - cx;
    dy = y - cy;
    
    len = sqrt(dx*dx + dy*dy);
    
    dx /= len;
    dy /= len;
    
    if(len > rope_len)
    {
        force = (len - rope_len) / rope_len;
        vx -= dx * force;
        vy -= dy * force;
    }
}

Ensuite au niveau collisions corde/décors, mon 'monde' est basé sur un système de tiles et je ne vois pas du tout commencer gérer la corde.
J'imagine qu'il me faut une pile/liste contenant les point de collision entre ma corde et mon décor, et que la balancement doit se faire a partir du dernier point de collision ajouté a la pile, mais je ne vois pas du tout comment faire pour récupérer les points de collisions quand il le faut et construire cette liste...

Comment arriver de l'étape 1 a l'étape 3?

Merci de prendre un peu de votre temps pour m'éclairer et passez une agréable journée