2017-09-15 9 views
1

Je veux ajouter des bonus à mon jeu, mais quand mon sprite frappe le sprite powerup, il jette le cap parce que le jeu a enregistré une collision et je suppose que la physique entrent en jeu, quand je appuyez sur l'écran mon sprite saute en l'air, frappe la mise sous tension et arrête de monter et redescend. J'ai besoin de l'image-objet pour sauter, collecter le sprite de power-up et le score monte (le code de remontée de score est fait) mais je n'arrive pas à comprendre comment faire pour que les 2 sprites n'enregistrent pas la collision.Faire SKSprites enregistrer la collision, mais ne pas affecter les uns les autres

//Create the PowerUp Coin to add score 
func createCoin() { 

    coinPlus5 = SKSpriteNode(imageNamed: "coin1") 
    coinPlus5.name = "coinPlus5" 
    coinPlus5.position.x = self.frame.size.width*2.6 
    coinPlus5.position.y = CGFloat.randomBetweenNumbers(firstNum: -(self.frame.size.height/2.8), secondNum: (self.frame.size.height/2.4)) 
    coinPlus5.zPosition = 11 
    coinPlus5.size = CGSize(width: 50, height: 50) 
    hitPowerup = false 

    // Add Physics Bodys 
    coinPlus5.physicsBody = SKPhysicsBody(texture: coinPlus5.texture!, size: CGSize(width: coinPlus5.size.width, height: coinPlus5.size.height)) 


    //enemyBird1.physicsBody = SKPhysicsBody(circleOfRadius: self.size.height/13) 
    coinPlus5.physicsBody?.allowsRotation = false 
    coinPlus5.physicsBody?.affectedByGravity = false 
    coinPlus5.physicsBody?.isDynamic = false 
    // Add Collision Bitmasks 
    coinPlus5.physicsBody?.categoryBitMask = ColliderType.Pipes 

Et le code de sprite de caractères est:

func initialise() { 

    self.name = "Bird" 
    self.zPosition = 3 
    self.size = CGSize(width: 130, height: 110) 
    self.anchorPoint = CGPoint(x: 0.5, y: 0.5) 






    self.physicsBody = SKPhysicsBody(texture: self.texture!, 
            size: CGSize(width: self.size.width, 
                height: self.size.height)) 

    // Add Physics Bodys 
    self.physicsBody?.allowsRotation = false 
    self.physicsBody?.affectedByGravity = false 
    self.physicsBody?.mass = CGFloat(-100) 
    // Add Collision Bitmasks 
    self.physicsBody?.categoryBitMask = ColliderType.Bird 
    self.physicsBody?.collisionBitMask = ColliderType.Ground | ColliderType.Pipes 
    self.physicsBody?.contactTestBitMask = ColliderType.Ground | ColliderType.Pipes | ColliderType.Score 


} 

Répondre

1

Actuellement la catégorie physique de votre pièce est ColliderType.Pipes. Vous avez défini le de l'oiseau pour entrer en collision avec la terre et les tuyaux (ColliderType.Ground | ColliderType.Pipes). Cela signifie que votre joueur aura une collision physique avec les pièces de monnaie.

Pour corriger cela, vous voulez probablement un nouveau type de collisionneur pour les pièces de monnaie. Vous voulez que les pièces fassent partie du contactTestBitMask du joueur afin que vous puissiez détecter quand le joueur obtient une pièce, mais pas une partie des collisionBitMask du joueur pour qu'elles n'affectent pas votre physique.

+1

Cela a fonctionné parfaitement! – LukeTerzich

+0

Super! Bonne chance avec votre jeu. – nathan