         super.addChild(node)
     }
     
+    var touchPoint: CGPoint?
+    var moving: Bool = false
+    
+    override func atPoint(_ p: CGPoint) -> SKNode {
+        let node = super.atPoint(p)
+        if let node = node.parent as? Node {
+            return node
+        }
+        return node
+    }
+    
+    override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
+        if let touch = touches.first {
+            touchPoint = touch.location(in: self)
+        }
+    }
+    
+    override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
+        if let touch = touches.first {
+            
+        }
+    }
+    
+    override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
+        if !moving, let point = touchPoint, let node = atPoint(point) as? Node {
+            node.selected = !node.selected
+        }
+        moving = false
+    }
+    
+    override func touchesCancelled(_ touches: Set<UITouch>, with event: UIEvent?) {
+        moving = false
+    }
+    
 }
 
 class Node: SKShapeNode {
+    
+    var selected: Bool = false {
+        didSet {
+            guard selected != oldValue else { return }
+            let action: SKAction
+            if selected {
+                action = SKAction.scale(to: 1.3, duration: 0.2)
+            } else {
+                action = SKAction.scale(to: 1, duration: 0.2)
+            }
+            run(action)
+        }
+    }
     
     lazy var label: SKLabelNode = { [unowned self] in
         let label = SKLabelNode(fontNamed: "Avenir")

        skView.presentScene(scene)
        
        for _ in 0..<20 {
            let node = Node.make(radius: 30, color: UIColor(red: 1, green: 0.16, blue: 0.29, alpha: 1), text: "Hello")
            scene.addChild(node)
        }
    }

import UIKit

class ViewController: UIViewController {
    
    var skView: SKView {
        return view as! SKView
    }
    
    override func loadView() {
        super.loadView()
        
        self.view = SKView(frame: self.view.bounds)
    }
    
