Перетащите UIViews с Box2d (iOS)
Недавно я нашел хороший учебник по включению физики с Box2d для iOS.
http://www.cocoanetics.com/2010/05/physics-101-uikit-app-with-box2d-for-gravity/
Мне просто интересно, как реализовать перетаскивание для UIView. Кто-нибудь может предоставить какое-либо направление? Спасибо за ваше время.
1 ответ
Ну, всегда имейте в виду, что все в Box2D должно быть перемещено силой (ну, можно напрямую установить положение, но если вам нужно плавное физическое движение, это не сработает).
Так что, если вы хотите переместить какое-либо тело в соответствии с другим телом (тело, перемещаемое прикосновением), суставы - лучший способ достичь этого, и угадайте, что, есть тип соединения под названием 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));
}
... обратите внимание, что этот сниппер содержит неопределенные "переменные", такие как PTM_RATION (если вы не понимаете их, проверьте основные учебные пособия или документы) и представление (то есть представление, содержащее перетаскиваемое представление), так что принимайте это как идею, а не скопировать и вставить пример:).
Вы создаете одно соединение (для каждого касания в мультитач-приложении - но вам нужно отследить, какое касание представляет это соединение мыши), и перемещаете цель соединения в его местоположение. Поскольку это сустав, силы прилагаются к телу B соответствующим образом (на самом деле, сустав мыши прикладывает большую силу, так что это почти как мгновенное перетаскивание).
Для получения дополнительной информации о соединениях, посмотрите этот учебник: Учебное пособие по Box2D 2.1a - Часть 2 (Соединения)
Я надеюсь, что мой пример понятен, если есть дополнительные вопросы, не стесняйтесь спрашивать:).