J'ai une application iOS codée en Swift 3 où une balle est tirée et rebondit sur des briques à l'écran. Si la brique est un PhysicsBody (un rectangle), je ne peux pas facilement déterminer quel côté/coin de la brique est touché. Ce que j'ai décidé de faire à la place, c'est que chaque côté de la brique soit un nœud distinct. Le problème que j'ai maintenant, c'est qu'une balle ne peut pas être en contact avec deux noeuds (disons le gauche et le bas) à la fois. Je diminue la valeur de la brique après chaque contact avec la balle, qui à son tour diminue la valeur de 2 pour ce seul contact. Comment puis-je faire en sorte que si une balle touche deux nœuds, le code ne soit exécuté que pour un seul contact ?
Parfois, le code ci-dessous est exécuté deux fois, et la balle entre en contact avec deux brickNodes à chaque fois.
func didBegin(_ contact: SKPhysicsContact) {
var firstBody:SKPhysicsBody
var secondBody:SKPhysicsBody
let countPoint = true
if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask {
firstBody = contact.bodyA
secondBody = contact.bodyB
} else {
firstBody = contact.bodyB
secondBody = contact.bodyA
}
if (firstBody.categoryBitMask & ballCategory) != 0 {
if (firstBody.node != nil && secondBody.node != nil){
if (secondBody.categoryBitMask & brickCategory) != 0 {
ballDidHitBrick(ballNode: firstBody.node as! SKShapeNode, brickNode: secondBody.node as! SKShapeNode, decreasePoint: countPoint)
} else if (secondBody.categoryBitMask & roofCategory) != 0 || (secondBody.categoryBitMask & rightWallCategory) != 0 || (secondBody.categoryBitMask & leftWallCategory) != 0 || (secondBody.categoryBitMask & bottomCategory) != 0 {
ballDidHitWall(ballNode: firstBody.node as! SKShapeNode, wallNode: secondBody.node as! SKShapeNode)
} else {
//Nothing as of yet
}
}
}
}