私は現在、親ノード(物理体が添付されていない)と、それぞれが円体で構成される多くの子ノードで構成されるラグドールフィギュアを持っています。SKPhysicsJointPin
円は、次のように、各円の間に を使用して互いに接続されます。
それぞれSKPhysicsJointPin
に があり、現在、とshouldEnableLimits = true
にそれぞれ -0.05 と 0.05 の値を使用しています。lowerAngleLimit
upperAngleLimit
これは非常にうまく機能し、図形が全体的に上下逆さまになる場合を除いて、形状が過度に変形するのを防ぎます。その場合、すべての関節が突然収縮しようとします。
- 参照:ビデオ
フィギュアが完全に逆さまになると、関節は非常に速く収縮します。彼が再び回転すると、すべての関節が正常に戻ります。なぜこれが起こるのですか?関節の正しい角度を維持するにはどうすればよいですか?
編集1:
奇妙なSwiftのバグが原因であった場合に備えて、Objective-Cでプロジェクトを書き直そうとしました。この問題はまだ Objective-C で発生していることが判明したため、Swift タグを削除しました。
現時点での私の最善の推測は、ジョイントが接続されているボディがいずれかの方向に 180° 以上回転している場合、ワールドに対するジョイントの角度が SpriteKit によって誤って計算されることです。基礎となる Box2D ジョイント。
ボディのワールド アングルに合わせて角度の下限と上限を継続的に更新する必要があるかどうかはわかりませんでしたが、ボディが逆さまになりそうになったときのように更新する必要はないようです。関節が正常に機能しなくなります。とにかく実験を続けます…</p>
編集2:
SpriteKit がzRotation
値を -180° から 180° の間に保つように (正当な理由があると思いますが) 変更しているため、問題が発生することはかなり確信しています。たとえば、ノードが時計回りに回転していて、-180° に達した場合、SpriteKit はその値を自動的に +180° に戻します。このラップアラウンドが関節の異常な動作を引き起こしていることはかなり確信しています。それを打ち消す方法を見つける必要があるだけです…</p>
編集3:
この問題を示すサンプル アプリケーション (ビデオを含む) をアップロードしました。これは、最初に Apple から要求されたものです: Xcode Project / Video