2014-08-30 34 views
0

我的联系功能有问题。Ios swift - 与具有类别的联系人区别BitBitMask

我的游戏包括摧毁两种不同颜色的气球:蓝色和黄色

在我的游戏作品伟大的时刻,但我想使色彩之间的差异来计算我多少蓝色或黄色气球explosed。

我初始化为许多categoryBitMask我有颜色和我的projectil categoryBitMask太:

let blueCategory:UInt32 = 0x1 << 1  //color category 
let yellowCategory:UInt32 = 0x1 << 1 

let balloonCategory:UInt32 = 0x1 << 1  // general balloons category 

let flechetteCategory:UInt32 = 0x1 << 0 // dart category 

气球定义:

func addBalloonbl(){ 


var balloonbl:SKSpriteNode = SKSpriteNode (imageNamed: "ballonbleu.png") 


balloonbl.physicsBody = SKPhysicsBody (circleOfRadius: balloonbl.size.width/2) 
balloonbl.physicsBody.dynamic = true 
balloonbl.physicsBody.mass = 1 
balloonbl.physicsBody.restitution = 1 


balloonbl.physicsBody.categoryBitMask = balloonCategory | blueCategory 
balloonbl.physicsBody.contactTestBitMask = flechetteCategory 
balloonbl.physicsBody.collisionBitMask = balloonCategory 





let minX = balloonbl.size.width/2 
let maxX = self.frame.size.width - balloonbl.size.width/2 
let rangeX = maxX - minX 
let position:CGFloat = CGFloat(arc4random()) % CGFloat(rangeX) + CGFloat(minX) 

balloonbl.position = CGPointMake(position, self.frame.size.height+balloonbl.size.height) 

self.addChild(balloonbl) 


} 





func addBalloonj(){  



    var balloonj:SKSpriteNode = SKSpriteNode (imageNamed: "ballonjaune.png") 

    balloonj.physicsBody = SKPhysicsBody (circleOfRadius: balloonj.size.width/2) 
    balloonj.physicsBody.dynamic = true 
    balloonj.physicsBody.mass = 1 
    balloonj.physicsBody.restitution = 1 

    balloonj.physicsBody.categoryBitMask = balloonCategory | yellowCategory 
    balloonj.physicsBody.contactTestBitMask = flechetteCategory 
    balloonj.physicsBody.collisionBitMask = balloonCategory 


    let minX = balloonj.size.width/2 
    let maxX = self.frame.size.width - balloonj.size.width/2 
    let rangeX = maxX - minX 
    let position:CGFloat = CGFloat(arc4random()) % CGFloat(rangeX) + CGFloat(minX)    
    balloonj.position = CGPointMake(position, self.frame.size.height+balloonj.size.height) 

    self.addChild(balloonj) 

} 

我的联系功能:

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

    } 

    if ((firstBody.categoryBitMask & flechetteCategory) != 0 && (secondBody.categoryBitMask & blueCategory) != 0) 
    { 
     flecheDidCollideWithBlueBalloon(firstBody.node as SKSpriteNode, balloon: secondBody.node as SKSpriteNode) 

    } 

    else if ((firstBody.categoryBitMask & flechetteCategory) != 0 && (secondBody.categoryBitMask & yellowCategory) !=0) 
    { 
     flecheDidCollideWithYellowBalloon(firstBody.node as SKSpriteNode, balloon: secondBody.node as SKSpriteNode) 

    } 
} 


func flecheDidCollideWithBlueBalloon (fleche: SKSpriteNode, balloon: SKSpriteNode) 
    { 

    self.runAction(SKAction.playSoundFileNamed("eclate.mp3", waitForCompletion: false)) 


    println("blue") 


    fleche.removeFromParent() 

    balloon.removeFromParent() 



    balloonDestroyed++ 


    } 


func flecheDidCollideWithBYellowBalloon (fleche: SKSpriteNode, balloon: SKSpriteNode) 

    {  

    self.runAction(SKAction.playSoundFileNamed("eclate.mp3", waitForCompletion: false)) 


    println("Yellow") 


    fleche.removeFromParent()  

    balloon.removeFromParent() 


    balloonDestroyed++ 


    } 

与此代码,我可以摧毁两个气球的颜色,但是当我摧毁一个黄色的func flech eDidCollideWithBlueBalloon被调用,而不是flecheDidCollideWithYellowBalloon。 “蓝色”在控制台显示屏上显示...

任何想法?

非常感谢!

回答

0

你的一些类变量的值相同:

let blueCategory:UInt32 = 0x1 << 1  //color category 
let yellowCategory:UInt32 = 0x1 << 1 
let balloonCategory:UInt32 = 0x1 << 1  // general balloons category 

由于要在相同的位掩码变量结合一些标志,它们是相互冲突的。

他们需要有不同的值:

let blueCategory:UInt32 = 0x1 << 1  //color category 
let yellowCategory:UInt32 = 0x1 << 2 
let balloonCategory:UInt32 = 0x1 << 3  // general balloons category 
+0

不工作:-(,它仍然写蓝蓝蓝蓝的... – Haox 2014-08-30 13:50:26

+0

其实它的工作原理!!!!谢谢,我犯了一个错误在我的功能! – Haox 2014-08-30 13:55:23