Nel mio progetto corrente che utilizza SpriteKit, ho una serie di sprite che devono essere scalate in su e in giù indipendentemente in vari momenti. Il problema è che quando scala il nodo, il corpo della fisica non si scala con esso in modo da rovinare la fisica. Ecco un piccolo esempio ho messo insieme per lo scopo di questa domanda:SKPhysicsBody e [SKNode setScale:]
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];
Notate come lo sprite blu (ridotta) si trova sulla cima di quello rosso, ma si può dire il suo corpo fisico ancora ha la dimensione che ho detto, e non ha scala.
Quindi, ovviamente, il ridimensionamento del nodo non ridimensiona il corpo fisico. Quindi la mia domanda è se devo farlo manualmente, come faccio a farlo?
Ho provato a scambiare il corpo con una delle dimensioni giuste durante il ridimensionamento, ma poi le cose si fanno davvero complicate se il vecchio corpo ha delle articolazioni, ecc ... Sarebbe molto più semplice se potessi ridimensionare il corpo esistente in qualche modo.
semplicemente non c'è ridimensionamento delle forme del corpo in Box2D (usato da SK) – LearnCocos2D