2016-06-19 3 views
3

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

2016-06-19 08:25:21.707 Space Escape[14677:5651144] PhysicsBody: Could not create physics body. 

Кроме того, игра использует много различных простых многоугольников и для некоторых physicsBody могут быть созданы, но для других он получает сообщение об ошибке.

func setPhysics(size: CGSize) { 

    self.physicsBody = SKPhysicsBody(texture: asteroidTexture, size: size) 
    self.physicsBody?.angularDamping = 0 
    self.physicsBody?.angularVelocity = 2 

} 

Вот текстура:

Simple Heptagon Sprite Texture

+0

У меня была аналогичная проблема для моих спрайтов. Когда я изменил изображения текстуры из изображений листа спрайтов на изображения, установленные для изображений для SKPhysicsBody, эта ошибка исчезла. – ZippyMind

ответ

1

В моей детской площадке она работает. Попробуйте заменить параметр size как в коде ниже и дайте мне знать

let asteroidTexture = SKTexture(imageNamed: "sprite") 
let physicsBody = SKPhysicsBody(texture: asteroidTexture, size: asteroidTexture.size()) 
+0

Изменил его на 'self.physicsBody = SKPhysicsBody (текстура: asteroidTexture, размер: asteroidTexture.size())', но я все равно получаю ту же ошибку. – user1947112

+0

@ user1947112 Хорошо, тогда это может быть связано с изображением. Если прозрачная часть имеет некоторый пиксель, это может создать проблемы. Не могли бы вы восстановить изображение с нуля? –

+0

У меня есть, он был создан в Adobe Illustrator как простой многоугольник с прозрачным фоном, изображение было прикреплено выше, я уверен, что нет лишних пикселей. Очень странно, что некоторые из изображений, созданных точно так же, работают. – user1947112

0

Я экспериментировал, что такого рода физического представления может быть замедлять ваши столкновения. Вместо этого, если вы не требуют чрезвычайной точности в физических телах ваших спрайтов пытаются использовать:

self.physicsBody = SKPhysicsBody(circleOfRadius: size.width/2) 

Это намного легче и тоньше, для расчетов центрального процессора. Вы можете видеть большую разницу, когда ваша игра почти завершена (например, 80%). Надеюсь, это поможет.

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