家アイコンの近くに行くとHelloって表示されるiPhoneアプリのサンプルコードを描いてみます。
import UIKit
import SpriteKit
class ViewController: UIViewController, SKSceneDelegate {
weak var scene : SKScene?
weak var near : SKNode?
override func viewDidLoad() {
super.viewDidLoad()
setupScene()
createHouse()
createWalker()
}
func setupScene() {
let sv = SKView(frame: view.bounds)
let s = SKScene(size: sv.frame.size)
s.delegate = self
s.backgroundColor = UIColor(hue: 0.2, saturation: 0.7, brightness: 0.6, alpha: 1)
sv.presentScene(s)
view.addSubview(sv)
scene = s
}
func createHouse() {
let r = CGRectGetMaxX(view.bounds) * 0.35
let dw = Double(M_PI) / 2.5
for i in 0…5 {
let w = dw * Double(i)
let x = Double(r) * cos(w) + Double(CGRectGetMidX(view.bounds))
let y = Double(r) * sin(w) + Double(CGRectGetMidY(view.bounds))
let house = SKSpriteNode(color: UIColor.blackColor(), size: CGSize(width: 50, height: 50))
house.name = “house”
house.position = CGPoint(x: x, y: y)
var pts = UnsafeMutablePointer<CGPoint>.alloc(3)
pts[0] = CGPoint(x: –40, y: 0)
pts[1] = CGPoint(x: 40, y: 0)
pts[2] = CGPoint(x: 0, y: 30)
let roof = SKShapeNode(points: pts, count: 3)
roof.position = CGPointMake(0, 15)
roof.lineWidth = 0
roof.fillColor = UIColor.blackColor()
house.addChild(roof)
let door = SKSpriteNode(color: UIColor.yellowColor(), size: CGSize(width: 20, height: 25))
door.position = CGPoint(x: 0, y: –15)
house.addChild(door)
self.scene?.addChild(house);
}
}
func createWalker() {
let walker = SKShapeNode(circleOfRadius: 20)
walker.name = “walker”
walker.position = CGPoint(x: CGRectGetMidX(view.bounds), y: CGRectGetMidY(view.bounds))
walker.fillColor = UIColor.blueColor()
for i in 0…1 {
let eye = SKSpriteNode(color: UIColor.whiteColor(), size: CGSize(width: 6, height: 4))
eye.position = CGPoint(x: i == 0 ? 10 : –10, y: 0)
walker.addChild(eye)
}
scene?.addChild(walker)
}
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
let walker = scene?.childNodeWithName(“walker”)
if let touch = touches.first as? UITouch {
let p = touch.locationInNode(scene)
walker?.runAction(SKAction.moveTo(p, duration: 1.0))
}
}
func update(currentTime: NSTimeInterval, forScene scene: SKScene) {
let walker = scene.childNodeWithName(“walker”)
scene.children
.filter {($0 as! SKNode).name == “house”}
.map { n -> Void in
if let n = n as? SKNode {
let d = hypotf(Float(n.position.x – walker!.position.x), Float(n.position.y – walker!.position.y));
if fabs(d) < 50 && self.near == nil {
let hello = SKLabelNode(text: “hello”)
hello.name = “hello”
hello.fontSize = 50
hello.position = n.position
self.scene?.addChild(hello)
hello.runAction(SKAction.moveByX(0, y: 30, duration: 0.5))
self.near = n
}
else if fabs(d) > 70 && self.near == n {
let hello = self.scene?.childNodeWithName(“hello”)
hello?.removeFromParent()
self.near = nil
}
}
}
}
}