iOS用のCocos2d + Box2dで書かれたドラッグアンドドロップ機能の実装が機能しています。Sprite Kit に移植する必要があります。ロジックは非常に基本的です。
- ユーザーが画面に触れると、指の下にあるスプライトを見つけます
- 見つかったスプライトとシーンの物理体の間にマウス ジョイントを作成し、ジョイントのターゲットをタッチの位置に設定します
- タッチが移動したときに、ジョイントのターゲットを新しい位置に更新します
- タッチが終わったらジョイントを外す
すべてがうまくいっています。タッチが終了したときに物理がシミュレートされる方法が気に入っています。ドラッグされた形状は、ドラッグの速度と方向に依存する速度を持っているため、スプライトを動かしているときに画面から指を離すと、同じ方向に動き続けますが、影響を受けます重力と減衰。
残念ながら、スプライト キットを使用して同じ効果を再現することはできません。マウス関節のような関節はありませんが、他の関節タイプを使ってみました。私はSKPhysicsJointFixedでほとんど成功しました - 私は新しいスプライトとそれとドラッグされたスプライトの間にジョイントを作成しています。残念ながら、Cocos2d + Box2d のマウス ジョイントのようには機能しません。スプライトをドラッグしている間、その速度は常にゼロになります。そのため、画面から指を離すたびに、ドラッグされたスプライトはすぐに停止し、重力の影響を受けて落下し始めます。ドラッグ中に指をどれだけ速く動かしても、ドラッグした形状を離した後は、まったく同じように動作します。
私の質問は、スプライト キットでマウス ジョイントを実装する方法、または上記のように動作するドラッグ アンド ドロップ機能を実装する方法です。
更新: これは、Sprite Kit を使用して実装しようとしているものをより明確に表示できる box2d マウス ジョイントの例です: http://blog.allanbishop.com/wp-content/uploads/2010/09/Box2DJointTutorial1.swf