46

スプライト キットを使用して弾性衝突を設定しようとしています。Sprite Kit Physics Collision Issueで尋ねたように、複数のオブジェクトが互いに近くにある場合に問題があります

衝突の状況のタイミングについて混乱しています。

デリゲート メソッドで に設定dynamicNO-didBeginContact:最終速度を計算してから、設定してから速度を正しく設定しようとしました。-didEndContact:dynamicYES

衝突の外で動的にしたい理由は、摩擦/重力などを利用できるようにしたいからです。順序/ロジックの何が問題になっていますか? 方法を調べました-didSimulatePhysicsが、うまくいくようには思えませんでした。

4

3 に答える 3

5

Sprite Kit を使用して弾性衝突を設定しようとしています

ここでの物理学を誤解していると思います。弾性衝突は、衝突を単純化しすぎています。実際には、衝突によってエネルギーが完全に移動することはありません。リンク先の関連する質問への回答で、ここで物理学を説明しました。

SpriteKit で「弾力的な」衝突を行うことができることがわかると思いますが、ほとんどの人はオブジェクト間にスペースが必要であることを認識していません。自分で物理計算をする必要はありません。

于 2015-05-18T21:30:43.543 に答える
1

これがまさにあなたがやろうとしていることかどうかはわかりませんが、SpriteKit の助けを借りずに衝突の結果を計算し、他のすべての物理を SpriteKit に任せたい場合は、次のようにします。

  1. dynamicプロパティは常にのままにしますYES
  2. categoryBitMaskオブジェクトの種類ごとにプロパティを設定します。
  3. collisionBitMaskオブジェクトのプロパティを、自動衝突計算を保持するすべてのカテゴリビットマスク (たとえば、壁で、他のオブジェクトではない) の分離に設定するか、すべての衝突を手動で処理する場合はゼロに設定します。
  4. contactTestBitMaskオブジェクトのプロパティを、衝突を手動で計算したいものに設定します。
  5. 結果として得られるすべての速度を計算し、 に設定しdidBeginContactます。

(つまり、オブジェクトを独自の から除外しますcollisionBitMask。)

このリンクが役立つ場合があります:衝突と接触の操作

于 2015-05-15T13:38:23.490 に答える
0
  1. setVelocity の代わりに applyImpulse を使用してください。インパルスまたはフォースを使用して、物理エンジンが適切にウォームアップできるようにする必要があります。setVelocity を使用すると、オブジェクトが非常に近くにある場合や重なっている場合に、予測できない結果が生じます。

  2. オブジェクト間にある程度の距離があり、それらが重ならないようにしてください。

  3. 衝突ビット マスクを正しく設定します。

これはすべて完全に機能するはずです。

于 2015-05-19T06:00:00.940 に答える