Bienvenue, Invité. Merci de vous connecter ou de vous inscrire.
Avez-vous perdu votre e-mail d'activation ?

Auteur Sujet: Gravityé et collisions  (Lu 2935 fois)

0 Membres et 2 Invités sur ce sujet

Bl4ckb0ne

  • Newbie
  • *
  • Messages: 34
    • Voir le profil
Gravityé et collisions
« le: Avril 30, 2013, 12:28:59 pm »
Salut à tous.

Je bosse actuellement sur un projet de jeu de plateforme en 2d, avec la SFML.

Et j'aimerai intégrer un système de gravité au sprites, pour les attirer vers le sol. J'ai regardé du côté de Box2D, mais j'ai beaucoup de mal à la lier avec la SFML. Donc je me suis dit : pourquoi pas coder à la main un fonction de gravité toute simple.

J'ai quelques notions de physiques, donc les formules ne devraient pas être difficiles à coder. Mais au niveau de l'intégration. Comment faire pour que tous les sprites présent dans la fenêtre de rendu soient attirés vers le sol!

De même pour la collision des sprites. J'ai quelques bout de codes pompé sur le net, mais je ne vois pas comment intégrer tout ça pour que tous les sprites de la fenêtre puissent gérer les collisions, et aussi les collisions avec le décors en tile mapping.

Voilà, si quelqu'un arrive à répondre à mes questions farfelues, merci d'avance.

gostron

  • Jr. Member
  • **
  • Messages: 53
    • Voir le profil
Re : Gravityé et collisions
« Réponse #1 le: Mai 01, 2013, 01:26:02 pm »
Bonjour,

Concernant la gravité je dirais que c'est relativement simple. Le moyen le plus évident serait d'entretenir une liste de toutes tes entitées sujettes à la gravité, et de la parcourir à chaque boucle pour en modifier la vitesse.
Puisque la gravité est une force, elle applique en continu une force vers le bas d'une intensité constante. On peut donc appliquer entre chaque calcul l'opération suivante : y += FORCE_GRAVITE*frameTime; où frameTime serait le temps passé entre deux calculs (ici entre deux affichages, mais on peut multithreader :p).

Concernant les collisions c'est relativement simple aussi. Si tu regardes un peu le forum tu verras que plusieurs ont déjà abordés le sujet. Le plus évident est de représenter tes éléments de collision par des formes simples (cercles et rectangles) puis de vérifier l'intersection de ces éléments entre eux pour vérifier s'il y a collision, et ce entre chaque calcul (ou image si on travaille sur un seul thread). Il suffit ensuite de réagir en conséquence de la collision.

Pour les rectangles, la fonctione intersects fait déjà tout le travail, et pour les cercles il suffit de vérifier la distance des centres.

Ai-je répondu à tes questions ?

Bl4ckb0ne

  • Newbie
  • *
  • Messages: 34
    • Voir le profil
Re : Gravityé et collisions
« Réponse #2 le: Mai 01, 2013, 04:01:18 pm »
En partie, oui. J'avais déjà pensé à l'idée de stocker toutes les entités dans un tableau, et de le parcourir.
Après, ce qui me fait peur, ce sont les collisions avec le décor en tile. Et surtout, je ne vois pas trop comment vérifier les collisions d'entités avec d'autres entités. Il faudrait des 100aines de lignes de codes pour vérifier à chaque seconde si l'entité X est en collision avec l'entité Y ou Z.

D'autre part, pour la gravité; que représente Y dans ta formule?

Cpl.Bator

  • Hero Member
  • *****
  • Messages: 540
    • Voir le profil
Re : Gravityé et collisions
« Réponse #3 le: Mai 01, 2013, 04:05:39 pm »
Y , l'axe vertical de ton entité.
regarde ceci : http://www.tonypa.pri.ee/tbw/

Bl4ckb0ne

  • Newbie
  • *
  • Messages: 34
    • Voir le profil
Re : Gravityé et collisions
« Réponse #4 le: Mai 01, 2013, 05:09:37 pm »
Joli ,je met en favoris ton lien. Même si c'est du javascript (?), y a toujours moyen de convertir.
Sinon, merci pour vos infos, je m'y met dès que j'ai fini mon anglais.

 

anything