2017-09-15 64 views
1

我希望为我的游戏添加通电,但是当我的精灵击中加电精灵时,它会将他抛出课程,因为游戏已经注册了一个碰撞,我猜想物理学会发挥作用,当我点击屏幕我的精灵在空中跳跃,击中加电并停止移动并再次跌落。让SKSprites注册冲突,但不会互相影响

我需要精灵跳起来,收集加力精灵和得分上升(得分上涨的代码完成),但我不知道如何使2个精灵没有注册碰撞。

//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 

和字符精灵代码:

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 


} 

回答

1

目前你的硬币的物理类是ColliderType.Pipes。你已经设置了鸟的collisionBitMask与地面和管道碰撞(ColliderType.Ground | ColliderType.Pipes)。这意味着你的玩家将与硬币发生物理碰撞。

要解决这个问题,你可能需要一个新的硬币对撞机类型。您需要硬币成为玩家的一部分contactTestBitMask,以便您可以检测玩家何时获得一枚硬币,但不是部分玩家的collisionBitMask,因此它们不会影响您的物理效果。

+1

这工作完美! – LukeTerzich

+0

太棒了!祝你好运。 – nathan