Select random node after shake gesture

I have a very basic app, that displays at random positions on the screen circles (that I named bubbles) and those bubbles moves when I rotate my device.

I'm trying to implement a method which is triggered when I shake the device, and that makes every bubbles disappears from the scene and choose a random bubble and place it at the center of the screen (a kind of lottery of bubbles basically).
That same bubble should not move until I touch it.When I do touch it, everything goes back to normal with all of my bubbles on my screen moving with my device's rotation.

My question : how I can make disappear every node and choose a random node to display it and center it on the screen.

This is my code :

import CoreMotion
import SpriteKit

class Bubble: SKShapeNode{}
class BName: SKLabelNode {}

class GameScene: SKScene {
    var motionManager: CMMotionManager?
    let bubbles = ["bubble1", "bubble2", "bubble3"]

    override func didMove(to view: SKView) {
        for bubble in bubbles {
            let ball = Bubble(circleOfRadius: 50)
            let ball_name = SKLabelNode(text: bubble)
            ball_name.position = CGPoint(x: ball.frame.midX, y: ball.frame.midY)
            ball.position = CGPoint(x: (CGFloat(arc4random_uniform(UInt32(frame.width)))) , y: (CGFloat(arc4random_uniform(UInt32(frame.height)))))
            ball.physicsBody = SKPhysicsBody(circleOfRadius: 50)
            ball.fillColor =
            ball.physicsBody?.restitution = 1
            ball.physicsBody?.mass = 1
            ball.physicsBody?.allowsRotation = false

        physicsBody = SKPhysicsBody(edgeLoopFrom: frame)
        motionManager = CMMotionManager()
    override func update(_ currentTime: TimeInterval) {
        if let accelerometerData = motionManager?.accelerometerData {
            physicsWorld.gravity = CGVector(dx: accelerometerData.acceleration.y * -66, dy: accelerometerData.acceleration.x * 66)
    override func motionBegan(_ motion: UIEvent.EventSubtype, with event: UIEvent?) {
        UIView.animate(withDuration: 0.4) {
            // call a function that take a random bubble and
            // display it at the center of the screen, while the
            // other ones disappears until I touch the bubble
            // and then all of the others re-appears including that random one
            // with every bubbles floating on the screen ie. what we had before
            // the shake


I think I need to use SKAction but I do not know how to choose the random node, and make all of the other bubbles disappears.

Thank you

Terms of Service

Privacy Policy

Cookie Policy