Swift SpriteKit PhysicsBody вынужден Xcode как необязательный

У меня возникла следующая проблема при попытке закодировать клон флэппи-птиц в Xcode 6 beta 7 с помощью Swift и SpriteKit.

После добавления свойства physicsBody в SKSpriteNode я не могу напрямую изменить свойство physicsBody, например, я не могу сделать следующее:

bird = SKSpriteNode(texture: birdTexture1)
bird.position = CGPoint(x: self.frame.size.width / 2.8, y: CGRectGetMidY(self.frame))
bird.runAction(flight)
bird.physicsBody = SKPhysicsBody(circleOfRadius: bird.size.height/2)
bird.physicsBody.dynamic = true
bird.physicsBody.allowsRotation = false

Сборка Xcode завершится ошибкой с ошибками в двух строках, где я добавляю динамические значения и значения AllowRotation в PhysicsBody, единственный способ сделать это — сделать следующее:

bird.physicsBody?.dynamic = true
bird.physicsBody?.allowsRotation = false

Проблема наличия physicsBody как необязательного с '?' характер заключается в том, что это усложняет выполнение определенных операций при попытке манипулировать некоторой физикой птиц, которую я хотел добавить, например вращение при движении.

Любое предложение о том, как избежать/исправить необходимость помечать свойство physicsBody как необязательное? («Физическое тело?»)

Спасибо!

Скриншот проблемы
(источник: tinygrab.com< /а>)

Увеличенный скриншот проблемы
(источник: tinygrab.com )


person Adrian E. Labastida Cañizares    schedule 03.09.2014    source источник


Ответы (2)


На самом деле, эту проблему можно решить простым способом. Можете добавить ! после физики Тело вот так

bird.physicsBody!.dynamic = true

Причина: Внутри кода SKNode вы увидите следующее утверждение:

var physicsBody: SKPhysicsBody?

PhysicsBody является типом Nullable. Таким образом, XCode проверяет, чтобы вы не развернули значение nil.

person tsingroo    schedule 19.09.2014

Я решаю это, создавая объект для тела SKPhysics и назначая его спрайту ПОСЛЕ его настройки:

let body = SKPhysicsBody(circleOfRadius: bird.size.height/2)
body.dynamic = true
body.allowsRotation = false

bird.physicsBody = body
person Marioea    schedule 15.09.2014