Se connecter / S'enregistrer
Votre question

C - Pour qu'un objet en suive un autre

Tags :
  • Programmation
  • Programme
Dernière réponse : dans Programmation
12 Novembre 2012 18:24:34

Bonjour à tous!

Je rencontre des difficultés pour coder en C (graphique avec graphics.h).
En effet le sujet est que je dois créer 2 objets (des rectangles pour l'instant), l'un doit être contrôlé par le joueur qui le déplace avec le clavier (j'ai déjà fait cette partie).
Mais le problème est dans la deuxième partie où un second rectangle doit en fait suivre le premier. Et une fois que le deuxième rectangle est rentré en contact avec celui que nous contrôlons, on perd la partie.
Et à ce niveau là je ne sais pas comment modifier les coordonnées du rectangle afin qu'il suive le rectangle sous notre contrôle... Ni comment préciser que l'on a perdu une fois que le 2ème rectangle nous a touché...

J'espère que j'ai été assez clair, demandez moi si vous voulez des précisions.

Merci d'avance

Autres pages sur : objet suive

a c 232 L Programmation
13 Novembre 2012 00:48:01

Salut,

Pour détecter si un "rectangle" entre en contact avec un autre, il suffit de regarder les coordonnées de tes rectangles. Si une partie d'un rectangle est inclus dans l'autre rectangle, c'est touché.
Pour suivre le rectangle, il suffit de le faire aller dans le même sens... donc si tu as déjà fait la partie déplacement avec un clavier, quand l'utilisateur clique sur gauche, tu bouges aussi l'autre, et ça suit :) 
a b L Programmation
16 Novembre 2012 21:44:08

C'est du calcul vectoriel basique.

Tu as 2 points de références de chaque rectangle (un coin ou le centre): [x1, y1] et [x2, y2]
Tu calcules le vecteur entre les 2 points: V = [Vx, Vy] = [x2 - x1, y2 - y1]
Ensuite, comme c'est un vecteur qui doit indiquer une direction, tu le normalises à 1 (taille à 1 quelque soit la distance entre les 2 rectangles). Et pour faire ça, il faut diviser le vecteur par sa longueur (calcul du théorème de Pythagore):
longeurV = Racine(Vx * Vx + Vy * Vy)
Vnormal = [Vnx, Vny] = [Vx / longueurV, Vy / longueurV]

Tu multiplies ton vecteur normal par la vitesse pour avoir la direction recherchée.
VdeplacementRecherche = [Vdx, Vdy] = [Vnx * vitesse, Vny * vitesse]

Ensuite, pour simuler une inertie directionnelle, tu reprends le vecteur de déplacement précédent et tu soustrais la vitesse dans sa taille (pour diminuer son impact tout en conservant l'inertie):
Vprecedent = [VdxPrec, VdyPrec]
longueurVprecedent = Racine(VdxPrec * VdxPrec + VdyPrec * VdyPrec)
nouvelleLongueur = longueurVprecedent - vitesse
Maintenant, il faut normaliser (diviser par la taille précédent), et lui affecter la nouvelle taille:
VprecedentReduit = [VdxPrec / longueurVprecedent * nouvelleLongueur, VdyPrec / longueurVprecedent * nouvelleLongueur]

Voilà, tu as réduit le déplacement précédent de de taille "vitesse" et créé ton nouveau avec une direction différente ou non mais de taille "vitesse". Il ne te reste plus qu'à créer le nouveau vecteur de déplacement:
Vnouveau = VprecedentReduit + VdeplacementRecherche

Enfin, si tu veux modifier l'effet d'inertie, au lieu de réduire l'ancien vecteur de "vitesse", tu mets une valeur différente.
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS