2015-10-26 3 views
0

Я работаю над контактами/столкновениями в своей новой игре. Я просто закодировал это, и он работает неправильно. Вот мой код:Почему мой столкновение/контакт не работает в Swift?

Square Детали:

square.position = CGPointMake(self.size.width/2, self.size.height/1.5) 
    square.zPosition = 35 
    square.size = CGSize(width: 40, height: 40) 
    square.physicsBody = SKPhysicsBody(rectangleOfSize: square.size) 
    square.physicsBody?.affectedByGravity = false 
    square.physicsBody?.categoryBitMask = squareGroup 
    square.physicsBody?.collisionBitMask = obstacleGroup 
    square.physicsBody?.contactTestBitMask = obstacleGroup 

    self.addChild(square) 

Препятствие Детали (Препятствие 1 и 2 одинаковы):

obstacle1.physicsBody = SKPhysicsBody(rectangleOfSize: obstacle1.size) 
    obstacle1.physicsBody?.affectedByGravity = false 
    obstacle1.physicsBody?.dynamic = true 
    obstacle1.physicsBody?.mass = 10000 
    obstacle1.physicsBody?.categoryBitMask = obstacleGroup 
    obstacle1.physicsBody?.collisionBitMask = squareGroup 
    obstacle1.physicsBody?.contactTestBitMask = squareGroup 

Вот мой код для контактов между ними и группами категории :

var squareGroup : UInt32 = 0x1 << 0 
var obstacleGroup : UInt32 = 0x1 << 1  

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 
      firstBody = contact.bodyA 
     } 



     if firstBody.categoryBitMask == 1 && secondBody.categoryBitMask == 2{ 
      let newScene = GameScene(size: self.size) 
      _ = SKTransition.fadeWithDuration(1) 
      self.view?.presentScene(newScene) 
     } 
    } 

Если бы кто-нибудь мог мне помочь, это было бы здорово. Задавайте вопросы в комментариях.

ответ

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

В заявлении еще у вас есть и firstBody = contact.bodyA

Я думаю, что вы whanted писать secondBody = contact.bodyA

добавить также двойную проверку для контакта

if (firstBody.categoryBitMask == 0x1 << 1 && secondBody.categoryBitMask == 2) || (firstBody.categoryBitMask == 0x1 << 2 && secondBody.categoryBitMask == 1){ 

    //enter code here 
} 
+0

Это еще Безразлично Не работай. –

+1

@JoshSchlabach Вы можете быть более конкретным? Что значит «не работает»? Вы проверили, действительно ли был вызванBeginContact? Правильно ли вы установили контакт делегата? – Whirlwind

+0

Площадь будет проходить через препятствия и ничего не делать. Вызывается Didbegincontact, и поэтому делегат контакта –

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