我在建设迅速精灵套件的比赛,我需要的分数被检测到2个节点之间的碰撞时,增加1。 得分被存储在一个变量中命名animalsCount
并输出到一个标签节点:
//Score count in stats bar
//Animal score count
animalsCount = 0
animalsCountLabel.text = "\(animalsCount)"
animalsCountLabel.fontSize = 45
animalsCountLabel.fontColor = SKColor.blackColor()
animalsCountLabel.position = CGPoint (x: 630, y: 40)
addChild(animalsCountLabel)
被碰撞两个精灵节点是savior
和chicken1
。 现在,我保持得分和使用下面的代码检测碰撞:
func didBeginContact(contact: SKPhysicsContact) {
//Chicken1
if (contact.bodyA.categoryBitMask == ColliderType.Savior.rawValue && contact.bodyB.categoryBitMask == ColliderType.Chicken1.rawValue ) {
println("chicken1 contact made")
chicken1.hidden = true
chicken1.setScale(0)
animalsCount++
animalsCountLabel.text = "\(animalsCount)"
} else if (contact.bodyA.categoryBitMask == ColliderType.Chicken1.rawValue && contact.bodyB.categoryBitMask == ColliderType.Savior.rawValue) {
println("chicken1 contact made")
chicken1.hidden = true
chicken1.setScale(0)
}
if语句,因为它不能在我的比赛成绩发生没有在别的提高。
的问题是, animalsCount
2,而不是1的增加,每次savior
和chicken1
碰撞。
一些故障排除后,我发现这并不是因为比分被增加为两个碰撞体。 这种情况并非如此,因为只有1行代码是从来也不会满意。 这是一种满意的唯一行:
if (contact.bodyA.categoryBitMask == ColliderType.Savior.rawValue)
比分上升了2,而不是1,因为savior
,似乎“反弹”关闭的chicken1
使contact.bodyA.categoryBitMask
设置等于ColliderType.Savior.rawValue
两次,每次碰撞似乎出现一次。
我不知道如何解决这个问题。 如何让这个碰撞只有一次检测的,因此得分只有一次增加了吗?