import SpriteKit
class SpaceshipScene: SKScene {
var 已添加内容 = false
var count = 0
override func didMoveToView(view: SKView) {
if !已添加内容 {
添加内容()
已添加内容 = true
}
}
func 添加内容(){
backgroundColor = SKColor.blackColor()
scaleMode = .AspectFit
let 宇宙飞船 = 创造宇宙飞船()
宇宙飞船.position = CGPoint(x: CGRectGetMidX(frame),
y: CGRectGetMidY(frame))
addChild(宇宙飞船)
let 生成陨石 = SKAction.sequence([
SKAction.performSelector("添加陨石", onTarget: self),
SKAction.waitForDuration(1, withRange: 1.5)])
runAction(SKAction.repeatActionForever(生成陨石))
physicsWorld.gravity = CGVector(dx: 0, dy: -0.001)
}
func 创造宇宙飞船() -> SKSpriteNode {
let 船体 = SKSpriteNode(color: SKColor.grayColor(),
size: CGSizeMake(0.12, 0.08))
let 盘旋 = SKAction.sequence([
SKAction.waitForDuration(1),
SKAction.moveByX(0.1, y: 0.05, duration: 1),
SKAction.waitForDuration(1),
SKAction.moveByX(-0.1, y: -0.05, duration: 1)
])
船体.runAction(SKAction.repeatActionForever(盘旋))
let 灯光1 = 创建灯光()
灯光1.position = CGPointMake(-0.08, 0.02)
船体.addChild(灯光1)
let 灯光2 = 创建灯光()
灯光2.position = CGPointMake(0.08, 0.02)
船体.addChild(灯光2)
船体.physicsBody = SKPhysicsBody(rectangleOfSize: 船体.size)
船体.physicsBody?.dynamic = false
船体.name = "船体"
船体.physicsBody?.mass = CGFloat.max
return 船体
}
func 创建灯光() -> SKSpriteNode{
let 灯 = SKSpriteNode(color: SKColor.yellowColor(), size: CGSizeMake(0.027, 0.027))
let 闪烁 = SKAction.sequence([
SKAction.fadeOutWithDuration(0.25),
SKAction.fadeInWithDuration(0.25)
])
灯.runAction(SKAction.repeatActionForever(闪烁))
return 灯
}
func 添加陨石(){
let 陨石 = SKSpriteNode(color: SKColor.brownColor(),
size: CGSizeMake(CGFloat(drand48() / Double(4)), CGFloat(drand48() / Double(4))))
陨石.position = CGPoint(x: drand48(), y: Double(CGRectGetMaxY(frame) - 0.1))
陨石.name = "陨石"
陨石.physicsBody = SKPhysicsBody(rectangleOfSize: 陨石.size)
陨石.physicsBody?.dynamic = true
陨石.physicsBody?.usesPreciseCollisionDetection = true
陨石.speed = 999999999
陨石.physicsBody?.mass = 999999999
addChild(陨石)
}
override func didSimulatePhysics() {
enumerateChildNodesWithName("陨石", usingBlock: { (节点,_) in if 节点.position.y < 0 {节点.removeFromParent(); self.count++; print(self.count)}})
if childNodeWithName("船体")?.position.y < 0 {
childNodeWithName("船体")?.runAction(SKAction.moveTo(CGPoint(x: CGRectGetMidX(frame),
y: CGRectGetMidY(frame)), duration: 2))
}
childNodeWithName("船体")?.physicsBody = SKPhysicsBody(rectangleOfSize: childNodeWithName("船体")!.frame.size, center: CGPointMake(CGRectGetMidX(childNodeWithName("船体")!.frame), CGRectGetMidY(childNodeWithName("船体")!.frame)))
}
}