Arrastra y suelta UIViews con Box2d(iOS)
drag-and-drop box2d-iphone (1)
Bueno, siempre tenga en cuenta que todo en Box2D tiene que moverse por la fuerza (bueno, es posible establecer la posición directamente, pero si desea un movimiento suave de la física, esto no servirá).
Entonces, si quieres mover un cuerpo en consecuencia a otro cuerpo (cuerpo movido por contacto) las articulaciones son la mejor manera de lograrlo y adivina qué, hay un tipo de junta llamado MouseJoint, que es perfecto para esta situación (también podría ser utilizado por multitáctil).
b2MouseJointDef def;
def.bodyA=/*background_body*/;
def.bodyB=/*body of dragged view*/;
def.frequencyHz=60.0f;
def.dampingRatio=0.0f;
def.maxForce=x * def.bodyB->GetMass(); //i use this for same applied force depending on mass
def.collideConnected=YES;
def.target.Set(loc.x/PTM_RATIO, (self.bounds.size.height - loc.y)/PTM_RATIO);
bwMouseJoint joint=b2World->CreateJoint(def);
y luego establecer la posición (objetivo) de la articulación del ratón
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event{
CGPoint loc=[[touches anyObject] locationInView:view];
joint->SetTarget(b2Vec2(loc.x/PTM_RATIO,(view.bounds.size.height-loc.y)/PTM_RATIO));
}
... tenga en cuenta que este snipper contiene "variables" indefinidas como PTM_RATION (si no las entiende, consulte los tutoriales básicos o documentos) y view (que es una vista que contiene la vista arrastrada), así que tómenlo como una idea, no como copiar y pegar ejemplo :).
Usted crea una unión (para cada toque en la aplicación multitáctil, pero necesita rastrear qué toque representa esa combinación de mouse) y mueve el objetivo de unión a su ubicación. Debido a que es una unión, las fuerzas se aplican al cuerpoB de manera apropiada (de hecho, la articulación del ratón aplica una fuerza grande, por lo que es casi como arrastrar instantáneamente).
Para obtener más información sobre las articulaciones, consulte este tutorial: Tutorial de Box2D 2.1a - Parte 2 (Articulaciones)
Espero que mi ejemplo sea comprensible, si tiene alguna pregunta adicional, no dude en preguntar :).
Recientemente encontré un buen tutorial para habilitar la física con Box2d para iOS.
http://www.cocoanetics.com/2010/05/physics-101-uikit-app-with-box2d-for-gravity/
Me pregunto cómo implementar arrastrar y soltar para una UIView. ¿Alguien puede proporcionar alguna dirección? Gracias por tu tiempo.