2015-08-02 2 views
1

Я продлил SKSpriteNode с моим собственным классом, чтобы иметь больше функций.Как получить SKSpriteNode от physicalBody?

Но как я могу получить этот расширенный узел, когда что-то «ударяет» по этому узлу и вызывается didBeginContact?

Потому что contact.bodyA и contact.bodyB являются физическими вещами, а родителем этого является игровая сцена.

Это мой подкласс SKSpriteNode:

class Orange: SKSpriteNode { 
    ... 

    func createPhysicsBody(){ 
     self.physicsBody = SKPhysicsBody(circleOfRadius: self.size.width/2) 
     self.physicsBody?.dynamic = true 
     ... 
    } 
} 

Это мой didBeginContact код:

func didBeginContact(contact: SKPhysicsContact){  
    switch(contact.bodyA.categoryBitMask + contact.bodyB.categoryBitMask){ 
     case orangeCategory + bulletCategory: 
      contactOrangeBullet(contact.bodyA, bodyB: contact.bodyB) 
      break; 
     default: 
      break; 
    } 
} 

В contactOrangeBullet просто код, который обрабатывает все, когда этот случай случается. Но мне нужно больше, чем physicsBody. Мне нужен «Оранжевый», который physicsBody - это всего лишь часть.

Или я понимаю что-то неправильно, и это невозможно, потому что физикаБоди не придерживается «оранжевого», хотя она была создана там?

ответ

2

Итак, вот пример того, как вы можете получить узел, связанный с физическим телом.

var node = SKSpriteNode(imageNamed: "theimage") 

node.physicsBody = SKPhysicsBody(circleOfRadius: 6) 

var copy = node.physicsBody 

Теперь я буду получать SKNode, связанные с copy

var node = copy.node 

Итак, все, что вам нужно сделать, это вызвать свойство node на physicsBody. Помните, что свойство node возвращает SKNode, а не SKSpriteNode.

+0

Да, это то, что я использую в данный момент. Но этот SKNode ничего не знает о моих функциях и атрибутах класса «Оранжевый». – Jurik

+0

Я делаю это так: http://stackoverflow.com/questions/31812108/how-to-know-which-skspritenode-is-affected-by-collision-detection-in-swift/31922288#31922288 – Jurik

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