在背景下产生的节点,我无法将它们带到前面

时间:2015-08-10 00:22:48

标签: swift background sprite-kit repeater nodes

我正在使用重复动作。当应用程序首次加载时,精灵会在背景前产生,因此您可以看到它们。但是当你从得分场景重新开始游戏时,节点会在背景后面产生,我无法让它们出现在前面。有谁知道我怎么解决这个问题?

    override init(size: CGSize) {
    super.init(size: size)

    //Background
    for var index = 0; index < 2; ++index {
        let bg = SKSpriteNode(imageNamed: "background")
        bg.position = CGPoint(x: -100, y: index * Int(bg.size.height))
        bg.anchorPoint = CGPointZero
        bg.name = "background"
        self.addChild(bg)
    }
     runAction(SKAction.repeatActionForever(SKAction.sequence([SKAction.runBlock(callEnemy), SKAction.waitForDuration(1.0)]))) 

runAction是重复动作似乎不起作用的代码

    //Player functions
    foreground = SKNode()
    addChild(foreground)
    player = createPlayer()
    foreground.addChild(player)
    //Game hud
    gameHud = SKNode()
    addChild(gameHud)
}

    func callEnemy() {
    if player.physicsBody?.dynamic == true {
        spawnEnemy()
    }
}

    func spawnEnemy() -> SKNode{

    let enemy = SKSpriteNode(imageNamed: "Enemy1")
    enemy.position = CGPoint(x: frame.size.width * random(min: 0, max: 1), y: 690 )
    addChild(enemy)

    enemy.physicsBody = SKPhysicsBody(circleOfRadius: enemy.size.width / 2)
    enemy.physicsBody?.dynamic = true
    enemy.physicsBody?.allowsRotation = false
    enemy.physicsBody?.affectedByGravity = false
    enemy.physicsBody?.velocity = CGVector(dx: enemy.physicsBody!.velocity.dx, dy: -200.0)
    enemy.physicsBody?.restitution = 1.0
    enemy.physicsBody?.friction = 0.0
    enemy.physicsBody?.angularDamping = 0.0
    enemy.physicsBody?.linearDamping = 0.0
    if enemy.position.y <= CGFloat(0) {
        enemy.removeFromParent()
    }
    return enemy
}

1 个答案:

答案 0 :(得分:2)

为了让节点位于背景之上,您需要更改其zPosition。如果您指定:

bg.zPosition = 0

foreground.zPosition = 1

前景现在将在背景之上。 zPosition指定z轴上每个节点的位置。