Ios swift - 与具有类别的联系人区别BitBitMask
问题描述:
我的联系功能有问题。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。 “蓝色”在控制台显示屏上显示...
任何想法?
非常感谢!
答
你的一些类变量的值相同:
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
不工作:-(,它仍然写蓝蓝蓝蓝的... – Haox 2014-08-30 13:50:26
其实它的工作原理!!!!谢谢,我犯了一个错误在我的功能! – Haox 2014-08-30 13:55:23