ジャンプで星を飛び越える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](0…4).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) }}
}