-1

最近、Box2d for iOS で物理を有効にするための素晴らしいチュートリアルを見つけました。

http://www.cocoanetics.com/2010/05/physics-101-uikit-app-with-box2d-for-gravity/

UIView にドラッグ アンド ドロップを実装する方法を知りたいです。誰でも方向性を提供できますか?御時間ありがとうございます。

4

1 に答える 1

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 (理解できない場合は、基本的なチュートリアルまたはドキュメントを確認してください) やビュー (ドラッグされたビューを含むビュー) などの未定義の「変数」が含まれていることに注意してください。例をコピーして貼り付けます:)。

1 つのジョイントを作成し (マルチタッチ アプリのタッチごとに - ただし、マウス ジョイントを表すタッチを追跡する必要があります)、ジョイントのターゲットをその場所に移動します。関節なので本体Bに適度に力がかかります(実際、マウスの関節は力が大きいので、一瞬ドラッグに近いです)。

ジョイントの詳細については、次のチュートリアルを参照してください: Box2D 2.1a チュートリアル – パート 2 (ジョイント)

私の例が理解できることを願っています。追加の質問があれば、遠慮なく尋ねてください:)。

于 2012-10-10T20:23:56.493 に答える