鏡みたいに左右反転させながら点繋ぎするiPhoneアプリのサンプルコードを描いてみます。
import UIKit
import SpriteKit
class ViewController: UIViewController, SKSceneDelegate {
weak var scene : SKScene?
var point = CGPointZero
override func viewDidLoad() {
super.viewDidLoad()
setupScene()
createDotDot()
createMarker()
}
func setupScene() {
let w = CGRectGetMaxX(view.bounds)
let h = CGRectGetMaxY(view.bounds)
let s = SKScene(size: CGSize(width: w, height: h))
s.backgroundColor = UIColor(hue: 0.4, saturation: 0.6, brightness: 1, alpha: 1)
s.delegate = self
self.scene = s
// left view
let rv = SKView(frame: CGRect(x: –0.5 * w, y: 0, width: w, height: h))
rv.presentScene(s)
rv.transform = CGAffineTransformMakeScale(–1.0, 1.0)
view.addSubview(rv)
// right view
let lv = SKView(frame: CGRect(x: 0.5 * w, y: 0, width: w, height: h))
lv.presentScene(s)
lv.layer.opacity = 0.5
view.addSubview(lv)
}
func createDotDot() {
let r = CGRectGetMidY(view.bounds) * 0.8
let small = r / 1.75
let dAngle = M_PI / 2.5
[Int](0…4).each { i in
for var j=0; j<2; j++ {
let w = dAngle * Double(i) + M_PI / 2.0 + Double(j) * M_PI / 5.0
let x = (j==0 ? r : small) * CGFloat(cos(w))
let y = (j==0 ? r : small) * CGFloat(sin(w)) + CGRectGetMidY(self.view.bounds)
let dot = SKShapeNode(circleOfRadius: 10)
dot.name = “dot \(2 * i + j)“
dot.position = CGPoint(x: x, y: y);
dot.fillColor = UIColor.whiteColor()
self.scene?.addChild(dot)
}
}
}
func createMarker() {
let marker = SKSpriteNode(color: UIColor.yellowColor(), size: CGSizeMake(30, 30))
marker.name = “marker”
self.scene?.addChild(marker)
marker.runAction(SKAction.repeatActionForever(SKAction.rotateByAngle(CGFloat(M_PI), duration: 0.5)))
}
func update(currentTime: NSTimeInterval, forScene scene: SKScene) {
if let marker = self.scene?.childNodeWithName(“marker”) {
if !CGPointEqualToPoint(marker.position, self.point) {
self.point = marker.position
let line = SKSpriteNode(color: UIColor.orangeColor(), size: CGSizeMake(5, 5))
line.position = marker.position
self.scene?.addChild(line)
}
}
}
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
let p = touches.anyObject()!.locationInNode(self.scene)
if let marker = self.scene?.childNodeWithName(“marker”) {
marker.runAction(SKAction.moveTo(p, duration: 1.0))
}
}
}
extension Array {
func each(doit:T -> Void) { for i in self {doit(i)} }
}