2014-08-30 9 views
1

У меня есть игрок в моей игре, у него два состояния, летящие, падающие. У каждого из них есть изображение: player_flying, player_falling соответственно. Я также использую физические тела для обнаружения столкновения. Это нормально работает, когда я использую одну текстуру. Но когда я пытаюсь использовать оба в разных условиях, используя разные текстуры, это показывает мне ошибку в журнале. Я пытаюсь это так:SpriteKit PhysicsBody: Не удалось создать физическое тело

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

проверить, что оба изображения загружены, то есть self.player.texture не должно быть nil – LearnCocos2D

+0

Это не ноль, на самом деле это даже изменяет текстуру в игре, но не меняет физическое тело, и кажется статическим изображение на экране. –

+0

Является ли приведенный выше код реализованным в методе обновления? – 0x141E

ответ

2

благодаря 0x141E, я узнал, что моя текстура была немного белого дерьма вокруг него, после того как я удалил его, все начали работать. Теперь мне интересно, как скрыть ход вокруг моей текстуры, которая представляет мой физический объект.

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; 
    } 
} 
+0

По-прежнему не работает. (Та же ошибка –

+0

Возможно, ваше изображение слишком сложно использовать для создания физического объекта. Вместо этого вы можете использовать физическое тело на основе CGPath? – 0x141E

+0

Есть ли способ сделать это легким? Или единственный способ для создания CGPath - путем устранения точек текстуры? –

Смежные вопросы