Déplacer le corps à une position spécifique - Box2D
J'ai un b2Body qui j'aimerais passer à une certaine position de la cible. Je ne veux pas utiliser le SetPosition fonction. Comment puis-je réaliser cela à l'aide de :
- Évolution linéaire des vitesses.
- À l'aide de mouseJoint. (La position de la cible est fixe. La souris n'est PAS en cause.)
Je suis en utilisant Box2DAS3 2.1. De l'aide dans une autre langue serait également appréciée.
- voulez-vous dire sa ancré à un seul endroit et vous voulez qu'il soit déplacé, ou que vous voulez déplacer à un certain endroit, puis y rester? Veuillez préciser dans tous les cas.
Vous devez vous connecter pour publier un commentaire.
La façon la plus simple est effectivement d'utiliser
SetPosition
/SetTransform(position,angle)
. Par exemple:Évidemment, l'instantané de saut signifie que vous êtes une subversion de la simulation physique, mais c'est le plus simple, le plus direct pour définir la position d'un corps.
Étant donné que vous ne voulez pas utiliser
SetPosition
(ce qui est équivalent au code affiché ci-dessus) puisApplyLinearImpulse
avec la force appropriée (en fonction de la Masse et de la vitesse actuelle du corps) fera l'affaire, et il est plus correct à partir d'une simulation de point de vue, mais ce sera probablement le plus difficile étant donné les effets secondaires potentiels, etc.De toute façon, iforce2d couverts
SetLinearVelocity
..., et j'ajouterais qu'une souris commune est très utile même lorsque la "souris" n'est pas en cause.setPosition
La façon la plus simple consisterait à définir la vitesse linéaire de l'organisme afin qu'il couvre la distance nécessaire à un pas de temps. par exemple. si le corps a besoin pour se déplacer (2,3) unités pour se rendre à l'endroit désiré et votre timestep est 60Hz vous pourriez SetLinearVelocity(120,180) pour un pas de temps. Dans la prochaine étape, bien entendu, vous devez définir la vitesse de retour à zéro pour arrêter de voler de la distance. Le résultat de ce n'est pas très différente si l'on avait utilisé SetTransform, à l'exception de CCD de travail et si tout est dans la façon dont elle va obtenir piraté.
Si vous ne voulez pas le corps pour arriver à un pas de temps, juste de limiter la vitesse max qu'il peut avoir.
Si vous utilisez plutôt ApplyForce/ApplyLinearImpulse, vous pourriez faire quelque chose de similaire, mais vous avez besoin de prendre en compte la vitesse actuelle du corps aussi. Vous pourriez trouver cette page utile, il explique la rotation de la version de cela, mais le principe est le même: http://www.iforce2d.net/b2dtut/rotate-to-angle