2016-03-26 3 views
1

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

let catGroup:UInt32 = 0x1 << 0 
let groundGroup:UInt32 = 0x2 << 1 
    cat.physicsBody?.categoryBitMask = catGroup 
    cat.physicsBody?.contactTestBitMask = groundGroup 
    ground.physicsBody?.categoryBitMask = groundGroup 
    ground.physicsBody?.contactTestBitMask = catGroup 

и вот где я запутался

func didBeginContact(contact: SKPhysicsContact) { 

    var firstBody: SKPhysicsBody 
    var secondBody: SKPhysicsBody 

    if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask 
    { 
     firstBody = contact.bodyA 
     secondBody = contact.bodyB 
    } 
    else { 
     firstBody = contact.bodyB 
     secondBody = contact.bodyA 
    } 

    if firstBody.categoryBitMask==0 && secondBody.categoryBitMask==1 { 
     print("contact") 
    } 

} 

так я должен заменять первый корпус и второй корпус с catGroup и groundGroup? Я не знаю, как это сделать.

+0

Возможного дубликату [начинающий быстр набор спрайтов - помощь обнаружению столкновений узла (SKPhysicsContact)] (http://stackoverflow.com/questions/26270504/beginner-swift-sprite-kit -node-collision-detect-help-skphysicscontact) –

+0

Установили ли вы класс, в котором у вас есть? BeginContact To Have to Physivs Обратитесь к протоколу Delegate, и вы задали свойство «delegate»? Сделав это, поместите в свой dudBeginContact отпечаток («Contact found»), чтобы узнать, вызвано ли его вызовом (или, точнее, установить точку останова). –

+0

Вы не можете заменить firstBody и secondBody еще, поскольку вам нужно изучить их categoryBitMasks, чтобы узнать, что является кошкой, а какой является почвой. –

ответ

1

Не будьте палкой, но вы не должны начинать вопрос: «Я не мог найти что-либо в Интернете», если это явно не так. Существует миллион учебников по обнаружению столкновений в качестве одной из основ в SpriteKit.

Теперь на ваш вопрос. Вы не дали своим спрайтам фактическое физическое тело, и ваши физические категории настроены странно. Измените код этого

struct PhysicsCategory { 
     static let cat:UInt32 = 0x1 << 0 
     static let ground:UInt32 = 0x1 << 1 
} 

class GameScene: SKScene, SKPhysicsContactDelegate { 


    override func didMoveToView(view: SKView) { 
    /* Setup your scene here */ 

     physicsWorld.contactDelegate = self 


     cat.physicsBody = SKPhysicsBody(rectangleOfSize: cat.size) // FORGOT THIS 
     cat.physicsBody?.categoryBitMask = PhysicsCategory.cat 
     cat.physicsBody?.contactTestBitMask = PhysicsCategory.ground 

     ground.physicsBody = SKPhysicsBody(rectangleOfSize: ground.size) // FORGOT THIS 
     ground.physicsBody?.categoryBitMask = PhysicsCategory.ground 
     ground.physicsBody?.contactTestBitMask = PhysicsCategory.cat // You dont really need this line as long as you have set it on the other body. 
    } 

    func didBeginContact(contact: SKPhysicsContact) { 
     var firstBody: SKPhysicsBody 
     var secondBody: SKPhysicsBody 

     if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask { 
      firstBody = contact.bodyA 
      secondBody = contact.bodyB 
     } else { 
      firstBody = contact.bodyB 
      secondBody = contact.bodyA 
     } 

     if firstBody.categoryBitMask == PhysicsCategory.cat && secondBody.categoryBitMask == PhysicsCategory.ground { 
      print("contact") 
     } 
    } 
} 

Если вы не хотите, чтобы ваши объекты падать, вы должны включить гравитацию выключить, который включен по умолчанию.

cat.physicsBody?.affectedByGravity = false 
ground.physicsBody?.affectedByGravity = false 

Надеется, что это помогает

+0

Спасибо за вашу помощь, но он попробовал это, и это не сработало. –

+0

У меня было 1 небольшая ошибка в структуре структуры физики, должно было быть статическим let. Я обновил весь свой ответ, чтобы было легче читать. Дайте мне знать, как это происходит – crashoverride777

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