iPhone星ジャンプ

ジャンプで星を飛び越えるiPhoneアプリのサンプルコードを描いてみます。

import UIKit

import SpriteKit

class ViewController: UIViewController {

    weak var scene : SKScene?

    

    override func viewDidLoad() {

        super.viewDidLoad()

        setupScene()

        createSlope()

        createStar()

        createBall()

    }

    func setupScene() {

        let sv = SKView(frame: view.bounds)

        let s = SKScene(size: sv.bounds.size)

        s.backgroundColor = UIColor(hue: 0, saturation: 0.9, brightness: 0.2, alpha: 1)

        sv.presentScene(s)

        view.addSubview(sv)

        scene = s

    }

    

    func createSlope() {

        let rect = CGRect(x: –CGRectGetMaxX(view.bounds) * 0.5, y: –5, width: CGRectGetMaxX(view.bounds), height: 10)

        let ground = SKShapeNode(rect: rect)

        ground.fillColor = UIColor.brownColor()

        ground.position = CGPointMake(CGRectGetMidX(view.bounds), 30)

        ground.physicsBody = SKPhysicsBody(rectangleOfSize: rect.size)

        ground.physicsBody?.dynamic = false

        scene?.addChild(ground)

        

        

        let path = UIBezierPath()

        path.moveToPoint(CGPointZero)

        path.addLineToPoint(CGPointMake(80, 0))

        path.addLineToPoint(CGPointMake(80, 50))

        path.addQuadCurveToPoint(CGPointZero, controlPoint: CGPointMake(60, 0))

        let slope = SKShapeNode(path: path.CGPath)

        slope.position = CGPointMake(140, 35)

        slope.fillColor = UIColor.brownColor()

        slope.physicsBody = SKPhysicsBody(polygonFromPath: path.CGPath)

        slope.physicsBody?.dynamic = false

        scene?.addChild(slope)

    }

    

    func createStar() {

        let r : Double = 20

        let dw : Double = M_PI * 4.0 / 5.0

        let path = UIBezierPath()

        [Int](04).each { i in

            if i == 0 {

                path.moveToPoint(CGPoint(x: r * cos(dw * Double(i)), y: r * sin(dw * Double(i))))

            }

            else {

                path.addLineToPoint(CGPoint(x: r * cos(dw * Double(i)), y: r * sin(dw * Double(i))))

            }

        }

        path.addLineToPoint(CGPoint(x: r * cos(0), y: r * sin(0)))

        

        let star = SKShapeNode(path: path.CGPath)

        star.position = CGPoint(x: CGRectGetMidX(view.bounds), y: CGRectGetMidY(view.bounds))

        star.fillColor = UIColor.yellowColor()

        star.zPosition = 10

        scene?.addChild(star)

        

        star.physicsBody = SKPhysicsBody(circleOfRadius: 20)

        star.physicsBody?.pinned = true

    }

    

    func createBall() {

        let ball = SKShapeNode(circleOfRadius: 20)

        ball.name = “ball”

        ball.fillColor = UIColor.purpleColor()

        ball.position = CGPointMake(50, 200)

        ball.physicsBody = SKPhysicsBody(circleOfRadius: 20)

        scene?.addChild(ball)

    }

    

    override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {

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

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

        ball?.name = “”

        

        self.createBall()

    }

}

extension Array {

    func each(doit:T -> Void) { for i in self { doit(i) }}

}