Methods your app can implement to respond when physics bodies come into contact.


@protocol SKPhysicsContactDelegate


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.scale(to: 50, duration: 0.5),
                                            SKAction.fadeOut(withDuration: 0.5)])
    let sequence = SKAction.sequence([growAndFadeAction,
    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


Responding to Contact Events

- didBeginContact:

Called when two bodies first contact each other.

- didEndContact:

Called when the contact ends between two physics bodies.


Inherits From

See Also

Physics Simulation

Getting Started with Physics

Simulate gravity, acceleration, collision detection, or joints.


The driver of the physics engine in a scene; it exposes the ability for you to configure and query the physics system.


An object that adds physics simulation to a node.


A description of the contact between two physics bodies.


A node that applies physics effects to nearby nodes.