ios7 – SKPhysicsBody和[SKNode setScale:]

在我目前使用SpriteKit的项目中,我有一堆精灵需要在不同时间独立地放大和缩小.问题在于,当我缩放节点时,物理体不会随之缩放,因此它会破坏物理学.这是我为了这个问题而放在一起的一个小例子:
CGSize objectSize = CGSizeMake(100,100);
self.physicsBody = [SKPhysicsBody bodyWithEdgeLoopFromRect:CGRectMake(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];

注意蓝色精灵(按比例缩小)如何位于红色精灵之上,但你可以告诉它的物理体仍然有我告诉它的尺寸,它没有缩放.

很明显,缩小节点不会缩小物理体.所以我的问题是如果我必须手动完成它,我该怎么做呢?

我尝试在缩放时用一个合适的尺寸交换身体,但是如果旧的身体有关节等,那么事情会变得非常复杂……如果我能以某种方式扩展现有的身体,那就简单多了.

解决方法

使用SKAction或Update循环,您可以使用适当的比例创建新的SKPhysicsBody并将其应用于对象.但是,通过这样做,您将失去速度.要解决此问题,您可以执行以下操作:
SKPhysicsBody *newBody = [SKPhysicsBody bodyWithRectangleOfSize:boxObject.size];
newBody.velocity = boxObject.physicsBody.velocity;

boxObject.physicsBody = newBody;

以上是来客网为你收集整理的ios7 – SKPhysicsBody和[SKNode setScale:]全部内容,希望文章能够帮你解决ios7 – SKPhysicsBody和[SKNode setScale:]所遇到的程序开发问题。

如果觉得来客网网站内容还不错,欢迎将来客网网站推荐给程序员好友。