2

SpriteKit で衝突法線を見つけたり計算したりする方法を知っている人はいますか? Box2D から来て、通常の情報を提供する多様なメソッドがありますが、SpriteKit フレームワークでは、SKPhysicsContact は接触点のみを提供します。

プリミティブ オブジェクト、円と衝突する平面、円/長方形の衝突、および円/カスタム シェイプの衝突を使用しています。

誰かが衝突接触点を使用して表面法線を計算する際の数学を教えてください。それは大歓迎です。

4

2 に答える 2

2

更新: iOS 8 の時点でSKPhysicsContactcontactNormalプロパティがあります。ただし、接触法線は必ずしも希望どおりに動作するとは限らないため、以下のアドバイスが適用される場合があります。


Box2D によって計算された衝突法線は、接触法線の適切な推定値ではない場合があります。これは、おそらく SpriteKit を含む、多くの 2D 物理エンジンの衝突検出/解決アルゴリズムに当てはまります。

古典的なブレイクアウト スタイルのパドル (パドルの端近くでボールを打つと、中央近くで打つよりもボールがそらされます) を実装しようとしている場合は、いくつかのアイデアがあります。

  1. パドルには楕円形の物理ボディを使用します。(スプライト アートの大部分が長方形であっても、ジオメトリの違いはプレーヤーにはわからない場合があります。) または、それぞれが独自の物理ボディを持つ複数のノードの構築を使用して、円、長方形、および円からより複雑な曲率を構成します。楕円。

  2. 衝突後のハンドラー (didEndContact:またはdidSimulatePhysics) を実装し、衝突後のボールの速度を調整します。接触点を (パドルの) ノード座標に変換し、パドルの中心からの水平オフセットを見つけ、それを使用してボールの新しい速度ベクトルをスケーリングまたは回転させることができます。vector_float2(このような自明ではないベクトル演算を行う場合は、SIMD ライブラリによって提供されるハードウェア アクセラレーションされたベクトル演算関数を使用できるように、ベクトルに変換すると便利な場合があることに注意してください。)

于 2013-09-30T18:12:51.933 に答える
0

SKPhysicsContactcontactNormalベクトル プロパティを含む

于 2016-01-12T18:16:32.967 に答える