J'essaie de créer une explosion de bombe à Farseer. J'ai créé un cercle pour la bombe. Cependant, si la bombe explose, les objets (corps) qui l'entourent devraient s'envoler car ils sont repoussés par la force énorme de l'explosion. Je ne sais pas comment créer cette force, cependant - comment puis-je le faire?
xna
c#
farseer-physics-engine
Homer Simpson
la source
la source
Réponses:
Je recommanderais de consulter la page d'explosion iforce2d . Il fait un excellent travail en passant en revue les différentes façons de gérer les explosions avec les compromis performances / précision. Il passe en revue 3 méthodes que je résumerai ici. Donc, c'est simplement moi qui résume les informations que j'ai trouvées pendant mes recherches et rien de tout cela n'est mon propre travail.
Ici aussi, vous voulez appliquer des impulsions et non des forces. Pour comprendre pourquoi lire ceci .
La méthode de proximité
C'est la même méthode que Byte56 reprend dans sa réponse. Le concept est simple. Avoir un point d'explosion et appliquer une impulsion dans la direction opposée du point qui affectera tous les objets avec une force basée sur leur distance.
Avantages:
Les inconvénients:
La méthode Raycast
Celui-ci est assez simple, chasse les rayons de l'origine de votre explosion et applique des impulsions lorsqu'ils entrent en collision avec un objet avec une impulsion dictée par la distance.
Avantages:
Les inconvénients:
La méthode des particules
Mon préféré. Semblable à la méthode RaySasting, mais au lieu de rayons, vous tirez parti du moteur physique et crachez de petites pastilles qui interagissent avec votre scène.
Avantages:
Les inconvénients:
la source
normalize(object - center)
.(object - center).length
En ce qui concerne le calcul de l'amplitude, vous pouvez commencer par une simple diminution linéaire, puis passer à d'autres formules si vous n'aimez pas les résultats.
la source