最近スプライト キットのリハーサルをしていて、非常に奇妙な問題に遭遇しました。親ノードをズーム(スケール変更)すると、SKPhysicsJointPin で結合されたボディが徐々に離れ、結合が壊れます。画像をお見せしましょう。
これは通常の状態です。
ズームインしたときは次のとおりです。
そして、ズームアウトしたときは次のとおりです。
体を結合する方法を尋ねると、茶色の棒を青いノードの中心にある青いノードに結合します。私の問題は何ですか?
編集:最近、接合体が動的でない場合、接合部が壊れず、すべてが期待どおりに機能することがわかりました。たとえば、[SKPhysicsBody bodyWithRectangleOfSize] の代わりに [SKPhysicsBody bodyWithEdgleLoopFromRect] を使用してスプライトの物理ボディを作成しても問題ありません。しかし、体が動的である必要があります。
物理をノードにアタッチするために使用するコードは次のとおりです。もちろん、すべて動的に行われます。簡潔にするためにハードコーディングしました。
-(void)attachPhysics{
//fixedComponentLeft & fixedComponentRight are two SKSprites
fixedComponentLeft.physicsBody=[SKPhysicsBody bodyWithCircleOfRadius:fixedComponentLeft.frame.size.width];
fixedComponentRight.physicsBody=[SKPhysicsBody bodyWithCircleOfRadius:fixedComponentLeft.size.width];
beam1.physicsBody=[SKPhysicsBody bodyWithRectangleOfSize:beam1.size];
joiningBody.physicsBody=[SKPhysicsBody bodyWithCircleOfRadius:joiningBody1.size.width];
[self.scene.physicsWorld addJoint:[SKPhysicsJointPin jointWithBodyA:fixedComponentLeft.physicsBody bodyB:beam1.physicsBody anchor:fixedComponentLeft.position]];
[self.scene.physicsWorld addJoint:[SKPhysicsJointPin jointWithBodyA:joiningBody.physicsBody bodyB:beam1.physicsBody anchor:beam1.endPoint]];
beam2.physicsBody=[SKPhysicsBody bodyWithRectangleOfSize:beam2.size];
[self.scene.physicsWorld addJoint:[SKPhysicsJointPin jointWithBodyA:joiningBody.physicsBody bodyB:beam2.physicsBody anchor:beam2.position]];
[self.scene.physicsWorld addJoint:[SKPhysicsJointPin jointWithBodyA:fixedComponentRight.physicsBody bodyB:beam2.physicsBody anchor:beam2.endPoint]];
}
上記のコードでは、beam1 と beam2 は SKSpriteNode のサブクラスのインスタンスです。デフォルトのアンカー ポイントは (0,0.5) で、スプライトの右端のポイントとして機能する endPoint というプロパティを追加しました。