SpriteKit PhysicsBody: Could not create physics body

匿名 (未验证) 提交于 2019-12-03 09:14:57

问题:

I have a player in my game, it has two states flying, falling. Each of them has an image: player_flying, player_falling correspondingly. I am also using a physical bodies to detect collision. It is completely normally functioning when I use one texture. But when I am trying to use both in different conditions using different textures, it shows me an error in the log. I am trying it like that:

if (self.player.physicsBody.velocity.dy > 30) {     self.player.texture = [SKTexture textureWithImageNamed:@"player_flying"];     self.player.physicsBody = [SKPhysicsBody bodyWithTexture:self.player.texture                                                         size:self.player.size];         } else {     self.player.texture = [SKTexture textureWithImageNamed:@"player_falling"];     self.player.physicsBody = [SKPhysicsBody bodyWithTexture:self.player.texture                                                         size:self.player.size]; }

the error is:

2014-08-30 12:55:47.515 kalabaska[1569:50535] PhysicsBody: Could not create physics body.

回答1:

thanks 0x141E, i found out that my texture had some white shit around it, after I've deleted it, everything started to work. Now i am wondering how to hide stroke around my texture which represents my physical object.



回答2:

You shouldn't change the texture and physics body of player at the update rate (up to 60 times a second). You should change them only when needed. Here's an example of how to do that:

if (self.player.physicsBody.velocity.dy > 30) {     // Change texture/body only if not already flying     if (!isFlying) {         self.player.texture = [SKTexture textureWithImageNamed:@"player_flying"];         self.player.physicsBody = [SKPhysicsBody bodyWithTexture:self.player.texture                                                         size:self.player.size];         isFlying = YES;     }       } else {     // Change texture/body only if not already falling     if (isFlying) {         self.player.texture = [SKTexture textureWithImageNamed:@"player_falling"];         self.player.physicsBody = [SKPhysicsBody bodyWithTexture:self.player.texture                                                         size:self.player.size];         isFlying = NO;    } }


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!