微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐