iPhone色ボール

色がついた玉の上をジャンプしていくiPhoneアプリのサンプルコードを描いてみます。

import UIKit

import SpriteKit;

class ViewController: UIViewController, SKPhysicsContactDelegate {

    weak var scene : SKScene?

    

    override func viewDidLoad() {

        super.viewDidLoad()

        self.setupScene()

        self.createBalls()

        self.createStart()

    }

    

    func setupScene() {

        let sv = SKView(frame: self.view.bounds)

        let sn = SKScene(size: sv.frame.size)

        sn.physicsWorld.contactDelegate = self

        sn.backgroundColor = UIColor(hue: 0.5, saturation: 0.01, brightness: 0.3, alpha: 1)

        sv.presentScene(sn)

        self.view.addSubview(sv)

        

        self.scene = sn

    }

    

    func createBalls () {

        for i in 05 {

            let x = i * 90 + 150

            let b = SKShapeNode(circleOfRadius: 30)

            b.fillColor = UIColor(hue: 0.15 * CGFloat(i), saturation: 0.6, brightness: 1, alpha: 1)

            b.position = CGPoint(x: x, y: 80)

            self.scene?.addChild(b)

            

            b.physicsBody = SKPhysicsBody(circleOfRadius: 30)

            b.physicsBody?.categoryBitMask = 0x1 << 1

            b.physicsBody?.contactTestBitMask = 0x1 << 2

            b.physicsBody?.restitution = 1.0

            b.physicsBody?.dynamic = false

        }

    }

    

    func createStart() {

        let b = SKShapeNode(circleOfRadius: 30)

        b.name = “ball”

        b.fillColor = UIColor.whiteColor()

        b.position = CGPoint(x: 60, y: 200)

        self.scene?.addChild(b)

        

        b.physicsBody = SKPhysicsBody(circleOfRadius: 30)

        b.physicsBody?.categoryBitMask = 0x1 << 2

        b.physicsBody?.restitution = 1.0

        b.physicsBody?.dynamic = false

    }

    

    override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {

        let ball = self.scene?.childNodeWithName(“ball”)

        ball?.physicsBody?.dynamic = true

        ball?.physicsBody?.applyImpulse(CGVector(dx: 39, dy: 0))

    }

    

    func didEndContact(contact: SKPhysicsContact) {

        let na = contact.bodyA.node as SKShapeNode

        let nb = contact.bodyB.node as SKShapeNode

        

        let tmpColor = nb.fillColor

        nb.fillColor = na.fillColor

        na.fillColor = tmpColor

    }

}