我的游戏中有一个玩家,有两个状态在飞行,下降。他们每个人都有一个图像:player_flying,player_falling相应的。我也使用物理身体来检测碰撞。当我使用一个纹理时它完全正常运行。但是当我尝试在不同的条件下使用不同的纹理时,它会在日志中显示错误。我这样想:
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];
}
错误是:
2014-08-30 12:55:47.515 kalabaska [1569:50535] PhysicsBody:无法创建物理身体。
答案 0 :(得分:2)
感谢0x141E,我发现我的纹理周围有一些白色的东西,在我删除之后,一切都开始起作用了。现在我想知道如何在我的纹理周围隐藏描边,代表我的物体。
答案 1 :(得分:1)
你不应该以更新速率(每秒高达60次)改变播放器的纹理和物理体。您应该只在需要时更改它们。以下是如何执行此操作的示例:
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;
}
}
答案 2 :(得分:0)