色がついた玉の上をジャンプしていく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 0…5 {
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
}
}