tutorial box2d

tutorial - Mueve el cuerpo a una posición específica-Box2D



box2d tutorial (2)

La forma más sencilla sería establecer la velocidad lineal del cuerpo para que cubra la distancia necesaria en un solo paso. p.ej. Si el cuerpo necesita mover (2,3) unidades para llegar a la ubicación deseada y su paso de tiempo es de 60 Hz, puede establecer la Vida Leal (120,180) para un paso de tiempo. En el siguiente paso de tiempo, por supuesto, tendrías que volver a poner la velocidad en cero para que deje de volar en la distancia. El resultado de esto no es muy diferente a si ha usado SetTransform, excepto que el CCD funcionará y si algo está en la forma en que será golpeado.

Si no desea que el cuerpo llegue en un solo paso, solo limite la velocidad máxima que puede tener.

Si prefieres usar ApplyForce / ApplyLinearImpulse, podrías hacer algo similar pero también debes tener en cuenta la velocidad actual del cuerpo. Es posible que encuentre útil esta página, explica la versión de rotación de este pero el principio es el mismo: http://www.iforce2d.net/b2dtut/rotate-to-angle

Tengo un cuerpo b2 que me gustaría mover en una determinada posición de destino. No quiero usar la función SetPosition. ¿Cómo puedo lograr esto usando:

  1. Cambiando las velocidades lineales.
  2. Utilizando mouseJoint. (La posición de destino es fija. El ratón NO está involucrado.)

Estoy usando Box2DAS3 2.1a. La ayuda en cualquier otro idioma también sería apreciada.


La forma más sencilla es utilizar SetPosition / SetTransform(position,angle) . Por ejemplo:

body->SetTransform(b2Vec2(0,0),body->GetAngle())

Obviamente, el salto instantáneo significa que estás subvirtiendo la simulación física, pero es la forma más simple y directa de establecer la posición de un cuerpo.

Dado que no desea utilizar SetPosition (que es equivalente al código publicado anteriormente), ApplyLinearImpulse con la fuerza apropiada (basada en la masa y la velocidad actual del cuerpo) hará el truco, y es más correcto desde una simulación punto de vista, pero es probable que sea más problemático dado los posibles efectos secundarios, etc.

De todos modos, iforce2d cubrió SetLinearVelocity ..., y agregaría que una articulación de mouse es muy útil incluso cuando el "mouse" no está involucrado.