2016-10-25 3 views
0

Хорошо, что я искал вокруг, и я не могу найти ответ на эту проблему. У меня есть 3 разных типа узлов, с которыми я хочу обрабатывать конфликты. Метеор, выстрел и станция. У меня есть код для обработки столкновений между кадрами и метеорами, которые отлично работают, но я не могу на всю жизнь понять, как реагировать на столкновения (да, обнаружение столкновения, но код ответа не выполняется) между станции и метеор. Вот мой didBegin FUNC: «столкновение»3 разных тела столкновения? Swift3 + Spritekit

func didBegin(_ contact: SKPhysicsContact){ 
    print("contact") 
    let shot = (contact.bodyA.categoryBitMask == shotCategory) ? contact.bodyA : contact.bodyB 
    let stationBody = (contact.bodyA.categoryBitMask == stationCategory) ? contact.bodyA : contact.bodyB 
    let otherObject = (shot == contact.bodyA) ? contact.bodyB : contact.bodyA 

    if ((contact.bodyA == stationBody) && (contact.bodyB == otherObject)) { 
     print("collision!") 
    } 
} 

«контакт» печатается, когда метеорит сталкивается со станцией, но не печатается. Я знаю, что его что-то делать с тем, как код сформулированный, но я не могу показаться, чтобы не работать, независимо от того, как я пишу/переписать это

ответ

0

Попробуйте с учетом порядка ...

if (contact.bodyA == stationBody && contact.bodyB == otherObject) || (contact.bodyB == stationBody && contact.bodyA == otherObject) 

Также вы устанавливаете другой объект в соответствии с выстрелом, поэтому, если выстрел не является одним из объектов при столкновении, это может быть проблемой

если bodyA - это другой объект и корпусB, то станция, например, будет установлена на bodyB (потому что categoryBitMask! = shotCategory), а затем otherObject будет установлен в bodyA. Поэтому contact.bodyB не будет равно другому объекту.

+0

Спасибо! Я обязательно попробую, когда вернусь домой, дайте знать, как получилось –

+0

отлично работает! Спасибо за помощь –

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