2014-10-28 4 views
0

Итак, я создаю игру с Sprite Kit, и в какой-то момент я хочу включить/отключить гравитацию на некоторых из моих узлов.Sprite Kit и тип вывода

Мне это удалось, но я просто задавался вопросом, есть ли лучший способ достичь этого.

Вот мой код:

func enableGravity() { 
    for rawBubble in container!.children { 
     let bubble = rawBubble as SKShapeNode 
     bubble.physicsBody?.dynamic = true 
    } 
} 

Когда не используется определение типа на rawBubble, я получаю эту ошибку: SKPhysicsBody? does not have a member named dynamic

Я предполагаю, что это на самом деле не Sprite Kit, связанных с проблемой, но сам по себе более Swift. Можно ли сделать это более простым способом?

Спасибо.

+0

Существует Свойство affectedByGravity, который, вероятно, будет лучше для вас в этом случае. Динамическое свойство управляет, если физика влияет на ваши объекты. Кроме того, по крайней мере один узел должен быть динамическим для события контакта или столкновения. Поэтому изменение динамического свойства вперед и назад, скорее всего, приведет вас к отслеживанию большего количества вещей, чем вам нужно. – meisenman

+0

Я действительно хотел, чтобы пузыри не пострадали от чего-либо, поэтому 'dynamic' был релевантным, но спасибо, что я забыл это свойство. – Skoua

ответ

1

С container!.children является [AnyObject], вам нужно будет отбросить его содержимое, прежде чем вы сможете сделать что-нибудь полезное с ними. Чистый способ я могу думать только, чтобы бросить его в [SKNode] прямо в for заявления:

func enableGravity() { 
    for bubble in container!.children as [SKNode] { 
     bubble.physicsBody?.dynamic = true 
    } 
}