SKPhysicsContactDelegate
Methods your app can implement to respond when physics bodies come into contact.
Declaration
protocol SKPhysicsContactDelegate : NSObjectProtocolMentioned in
Overview
An object that implements the SKPhysicsContactDelegate protocol can respond when two physics bodies with overlapping contactTestBitMask values are in contact with each other in a physics world. To receive contact messages, you set the contactDelegate property of a SKPhysicsWorld object. The delegate is called when a contact starts or ends.
You can use the contact delegate to play a sound or execute game logic, such as increasing a player’s score, when a contact event occurs. The following code shows how to display a shockwave effect when two nodes with the name ball come into contact. The code only creates the effect when the collision impulse is above a specified threshold:
Listing 1. Creating a shockwave effect when objects come into contact
let shockWaveAction: SKAction = {
let growAndFadeAction = SKAction.group([SKAction.scale(to: 50, duration: 0.5),
SKAction.fadeOut(withDuration: 0.5)])
let sequence = SKAction.sequence([growAndFadeAction,
SKAction.removeFromParent()])
return sequence
}()
func didBegin(_ contact: SKPhysicsContact) {
if contact.collisionImpulse > 5 &&
contact.bodyA.node?.name == "ball" &&
contact.bodyB.node?.name == "ball" {
let shockwave = SKShapeNode(circleOfRadius: 1)
shockwave.position = contact.contactPoint
scene.addChild(shockwave)
shockwave.run(shockWaveAction)
}
}