Ios 多次碰撞或吸毒

Ios 多次碰撞或吸毒,ios,sprite-kit,Ios,Sprite Kit,我有两种类型的碰撞。第一种是宇宙飞船和小行星(这已经处理好了),但我无法处理第二种碰撞,我的宇宙飞船雷泽撞上了敌人的宇宙飞船。在第二种情况下,我有吸毒/多次碰撞或有时完美碰撞 我的敌人空间是一个敌人空间类,它是SKSpriteNode的一个子类 所以问题是关于第二次碰撞。Is有多个意外的碰撞。我怎么能修好它 func didBeginContact(contact: SKPhysicsContact) { if contact.bodyA.categoryBitMask == Co

我有两种类型的碰撞。第一种是宇宙飞船和小行星(这已经处理好了),但我无法处理第二种碰撞,我的宇宙飞船雷泽撞上了敌人的宇宙飞船。在第二种情况下,我有吸毒/多次碰撞或有时完美碰撞

我的敌人空间是一个敌人空间类,它是SKSpriteNode的一个子类

所以问题是关于第二次碰撞。Is有多个意外的碰撞。我怎么能修好它

  func didBeginContact(contact: SKPhysicsContact) {

    if contact.bodyA.categoryBitMask == CollisionCategories.PlayerSpaceShip && contact.bodyB.categoryBitMask == CollisionCategories.Asteroid || contact.bodyB.categoryBitMask == CollisionCategories.PlayerSpaceShip && contact.bodyA.categoryBitMask == CollisionCategories.Asteroid {

      if !gameOver && !playerWasHit {

        playerWasHit = true
        self.pauseTheGame()

        //spaceShip vs asteroid animation
        let fadeOutAction = SKAction.fadeOutWithDuration(0.1)
        fadeOutAction.timingMode = SKActionTimingMode.EaseOut

        let fadeInAction = SKAction.fadeInWithDuration(0.1)
        fadeInAction.timingMode = SKActionTimingMode.EaseOut

        let blinkAction = SKAction.sequence([fadeOutAction, fadeInAction])
        let blinkRepeatAction = SKAction.repeatAction(blinkAction, count: 3)

        let delayAction = SKAction.waitForDuration(0.2)

        let gameOverAction = SKAction.runBlock({ () -> Void in

          self.gameSettings.lives--
          self.gameDelegate?.gameDelegateDidUpdateLives()

          if self.gameSettings.lives > 0 {

            self.respawn()
          } else {

            self.gameSettings.recordScores(self.gameSettings.currentScore)
            self.gameDelegate?.gameDelegateGameOver(self.gameSettings.currentScore)
            self.gameOver = true
            self.pauseTheGame()

          }
        })

        let gameOverSequence = SKAction.sequence([blinkRepeatAction, delayAction, gameOverAction])
        spaceShipLayer.runAction(gameOverSequence)
      }

      if soundOn {
        let hitSoundAction = SKAction.playSoundFileNamed("hitSound.wav", waitForCompletion: true)
        runAction(hitSoundAction)
      }
      //second case playerLazer vs enemySpaceShip
    } else if contact.bodyA.categoryBitMask == CollisionCategories.PlayerLaser && contact.bodyB.categoryBitMask == CollisionCategories.EnemySpaceShip || contact.bodyB.categoryBitMask == CollisionCategories.PlayerLaser && contact.bodyA.categoryBitMask == CollisionCategories.EnemySpaceShip {

        contact.bodyA.node?.removeFromParent()
        contact.bodyB.node?.removeFromParent()


      }
    }

我发现这个决定让一切变得完美:

第二部分应该是这样的: 如果


所以我做了。None categoryBitMask并在碰撞检测后应用它,所以现在点和spriteNode行为是正确的

你的问题是什么?你说的是你所拥有的,但在你的文本中甚至没有一个问号。“你想知道什么?”我被打扰了,忘了添加。非常感谢。
contact.bodyA.categoryBitMask == CollisionCategories.PlayerLaser &&
      contact.bodyB.categoryBitMask == CollisionCategories.EnemySpaceShip ||
      contact.bodyA.categoryBitMask == CollisionCategories.EnemySpaceShip &&
      contact.bodyB.categoryBitMask == CollisionCategories.PlayerLaser
    {

      contact.bodyA.node?.physicsBody?.categoryBitMask = CollisionCategories.None
      contact.bodyB.node?.physicsBody?.categoryBitMask = CollisionCategories.None
        contact.bodyA.node?.removeFromParent()
        contact.bodyB.node?.removeFromParent()
        self.addPoints(5)

    }
  }