用Box2d(iOS)拖放UIViews

我最近发现了一个很好的教程,使用Box2d for iOS启用物理。

Physics 101 – UIKit app with Box2D for Gravity

我只是想知道如何实现UIView的拖放。 谁能提供任何方向? 谢谢你的时间。

那么请记住,Box2D中的所有东西都必须被强制移动(也就是说,可以直接设置位置,但是如果你想要平滑的物理运动,这将不会成功)。

所以,如果你想相应地移动一些身体到另一个身体(身体移动触摸)关节是实现这一目标的最好方法,并猜测是什么,有联合types称为MouseJoint,这是完美的这种情况(也可以使用多点触摸)。

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); 

然后设置鼠标关节的位置(目标)

 -(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)); } 

…请注意,这个snipper包含像PTM_RATION(如果你不理解它们,检查基本的教程或文档)和查看(这是包含拖动视图的视图)未定义的“variables”,所以把它作为一个想法,而不是复制和粘贴示例:)。

您创build一个关节(对于多点触控应用程序中的每个触摸 – 但是您需要跟踪代表这个鼠标连接的触摸),并将关节的目标移动到其位置。 因为它是联合的,所以力量适用于身体B(实际上,鼠标关节施加了很大的力量,所以就像是瞬间拖动)。

有关关节的更多信息,请参阅本教程: Box2D 2.1a教程 – 第2部分(关节)

我希望我的例子是可以理解的,如果有任何额外的问题,请不要犹豫,问:)。