spritekit吧 关注:96贴子:390
  • 4回复贴,共1

(求助) SpriteKit 菜鸟问题, 求大神解决

只看楼主收藏回复

照着苹果官方发的文档改成 Swift 之后,较小的方块不能往下掉。
变量名称用的是中文, 请不要介意。同时添加了对 gravity 和 mass 以及 speed 的设置。
代码见二楼


1楼2015-12-28 10:01回复
    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)))
    }
    }


    2楼2015-12-28 10:01
    回复
      2025-12-24 12:38:57
      广告
      不感兴趣
      开通SVIP免广告
      是一直都是悬浮状态吗?


      IP属地:北京3楼2015-12-29 10:20
      收起回复
        还有就是飞船设置为了静态,不过还是会被陨石砸到屏幕外面。所以才在最后加代码把它送回原位。不过它不是应该不受影响吗


        来自iPhone客户端4楼2015-12-29 12:17
        回复