(求助) SpriteKit 菜鸟问题, 求大神解决
spritekit吧
全部回复
仅看楼主
level 11
朱智语 楼主
照着苹果官方发的文档改成 Swift 之后,较小的方块不能往下掉。
变量名称用的是中文, 请不要介意。同时添加了对 gravity 和 mass 以及 speed 的设置。
代码见二楼
2015年12月28日 02点12分 1
level 11
朱智语 楼主
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)))
}
}
2015年12月28日 02点12分 2
level 15
是一直都是悬浮状态吗?
2015年12月29日 02点12分 3
我看着就是一动不动
2015年12月29日 04点12分
level 11
朱智语 楼主
还有就是飞船设置为了静态,不过还是会被陨石砸到屏幕外面。所以才在最后加代码把它送回原位。不过它不是应该不受影响吗
2015年12月29日 04点12分 4
1