SpriteKit を使用する現在のプロジェクトでは、さまざまなタイミングで個別にスケールアップおよびスケールダウンする必要がある多数のスプライトがあります。問題は、ノードをスケーリングすると、物理ボディがそれに合わせてスケーリングされないため、物理が台無しになることです。この質問のためにまとめた小さな例を次に示します。
CGSize objectSize = CGSizeMake(100, 100);
self.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:CGRectMake(0, 0, self.size.width, self.size.height)];
SKSpriteNode *n1 = [SKSpriteNode spriteNodeWithColor:[UIColor blueColor] size:objectSize];
n1.position = CGPointMake(self.size.width/2, 2*self.size.height/3);
n1.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:objectSize];
n1.physicsBody.affectedByGravity = YES;
[self addChild:n1];
SKSpriteNode *n2 = [SKSpriteNode spriteNodeWithColor:[UIColor redColor] size:objectSize];
n2.position = CGPointMake(self.size.width/2, self.size.height/3);
n2.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:objectSize];
n2.physicsBody.affectedByGravity = YES;
[self addChild:n2];
[n1 setScale:0.5];
青いスプライト (縮小された) が赤いスプライトの上に置かれていることに注意してください。ただし、その物理体は、私が伝えた寸法のままであり、スケーリングされていないことがわかります。
したがって、明らかに、ノードを縮小しても物理ボディは縮小されません。私の質問は、手動で行う必要がある場合、どうすればよいですか?
スケーリングの際に適当なサイズのボディに差し替えてみたのですが、古いボディに関節などがあると大変なことになってしまいます…。