ジャンプすると箱につけた目が動くiPhoneアプリのサンプルコードを描いてみます。
import UIKit
import SpriteKit
class ViewController: UIViewController {
weak var scene : SKScene?
override func viewDidLoad() {
super.viewDidLoad()
self.setupScene()
self.createScore()
self.createGround()
self.createPlayer()
}
func setupScene() {
let sv = SKView(frame: self.view.bounds)
let s = SKScene(size: sv.frame.size)
s.backgroundColor = UIColor(hue: 0.3, saturation: 0.2, brightness: 1, alpha: 1)
sv.presentScene(s)
self.view.addSubview(sv)
self.scene = s;
}
var score = 0
func createScore() {
let str = NSString(format: “%05d”, score)
let scoreboard = SKLabelNode(text: str)
scoreboard.name = “scoreboard”
scoreboard.fontColor = UIColor.blackColor()
let size = scoreboard.frame.size
scoreboard.position = CGPoint(x: CGRectGetMidX(self.view.bounds), y: CGRectGetMidY(self.view.bounds))
self.scene?.addChild(scoreboard)
}
func createGround() {
let ground = SKSpriteNode(color: UIColor(hue: 0.4, saturation: 0.4, brightness: 1, alpha: 1), size: CGSize(width: CGRectGetMaxX(self.view.bounds), height: 20))
ground.position = CGPoint(x: CGRectGetMidX(self.view.bounds), y: 10)
self.scene?.addChild(ground)
ground.physicsBody = SKPhysicsBody(rectangleOfSize: ground.size)
ground.physicsBody?.dynamic = false
}
func createPlayer() {
let player = SKSpriteNode(color: UIColor(hue: 0.4, saturation: 0.8, brightness: 1, alpha: 1), size: CGSizeMake(80, 80))
player.name = “player”
player.position = CGPoint(x: CGRectGetMidX(self.view.bounds), y: 320)
player.physicsBody = SKPhysicsBody(rectangleOfSize: player.size)
player.physicsBody?.categoryBitMask = 0x01
player.physicsBody?.collisionBitMask = 0x01
self.scene?.addChild(player)
let eyes = SKSpriteNode(color: UIColor.clearColor(), size: CGSizeMake(60, 20))
eyes.name = “eyes”
eyes.position = player.position
eyes.physicsBody = SKPhysicsBody(rectangleOfSize: eyes.size)
eyes.physicsBody?.categoryBitMask = 0x10
eyes.physicsBody?.collisionBitMask = 0x10
eyes.physicsBody?.allowsRotation = false
self.scene?.addChild(eyes)
for i in 0..<2 {
let eye = SKShapeNode(circleOfRadius: 8)
eye.position = CGPoint(x: CGFloat(i) * 40 – 20 , y: 0)
eye.fillColor = UIColor.whiteColor()
eyes.addChild(eye)
}
for i in 0..<2 {
let sp = SKPhysicsJointSpring.jointWithBodyA(player.physicsBody, bodyB: eyes.physicsBody, anchorA: CGPoint(x: player.position.x, y: player.position.y + 40 – CGFloat(i) * 80), anchorB: eyes.position)
sp.frequency = 2.0
sp.damping = 3.0
self.scene?.physicsWorld.addJoint(sp)
}
let sl = SKPhysicsJointSliding.jointWithBodyA(player.physicsBody, bodyB: eyes.physicsBody, anchor: eyes.position, axis: CGVector(dx: 0, dy: 1))
self.scene?.physicsWorld.addJoint(sl)
}
func updateScore() {
++score
let str = NSString(format: “%05d”, score)
let scoreBoard = self.scene?.childNodeWithName(“scoreboard”) as SKLabelNode
scoreBoard.text = str
}
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
if let player = self.scene?.childNodeWithName(“eyes”) {
player.physicsBody?.applyImpulse(CGVector(dx: 0, dy: 230))
updateScore()
}
}
}