Swift 3重复产卵SKNode

Swift 3重复产卵SKNode,swift,sprite-kit,Swift,Sprite Kit,我有一个SKNode,可以在屏幕上生成和移动。这一切都按计划进行。然而,我不确定如何使这种情况多次发生。我的愿望是“桶”每2秒产卵一次。您可以在下面的代码中看到我的尝试 class GameScene : SKScene, SKPhysicsContactDelegate { var Player = SKSpriteNode() var Ground = SKSpriteNode() var Roof = SKSpriteNode() var Background = SKSpriteNod

我有一个SKNode,可以在屏幕上生成和移动。这一切都按计划进行。然而,我不确定如何使这种情况多次发生。我的愿望是“桶”每2秒产卵一次。您可以在下面的代码中看到我的尝试

class GameScene : SKScene, SKPhysicsContactDelegate {

var Player = SKSpriteNode()
var Ground = SKSpriteNode()
var Roof = SKSpriteNode()
var Background = SKSpriteNode()
let Obstacle1 = SKSpriteNode(imageNamed: "Fire Barrel 1")

override func didMove(to view: SKView) {

    // Create Background Color
    backgroundColor = bgColor

    // Set World Gravity
    self.physicsWorld.gravity = CGVector(dx: 0.0, dy: -4.0)

    // Create Player
    Player = SKSpriteNode(imageNamed: "Player")
    Player.setScale(0.5)
    Player.position = CGPoint(x: -self.frame.width / 2 + 100, y: -Player.frame.height / 2)

    self.addChild(Player)

    // Create Ground
    Ground = SKSpriteNode(imageNamed: "BGTileBtm")
    Ground.anchorPoint = CGPoint(x: 0,y: 0.5)
    Ground.position = CGPoint(x: -self.frame.width / 2, y: -self.frame.height / 2)

    self.addChild(Ground)

    // Create Roof
    Roof = SKSpriteNode(imageNamed: "BGTileTop")
    Roof.anchorPoint = CGPoint(x: 1,y: 1)
    Roof.position = CGPoint(x: -self.frame.width / 2, y: self.frame.height / 2 - Roof.frame.height)
    Roof.zRotation = CGFloat(M_PI)

    self.addChild(Roof)

    // Set Physics Rules
    Player.physicsBody = SKPhysicsBody(texture: SKTexture(imageNamed: "Player"), size: Player.size)
    Player.physicsBody!.affectedByGravity = true
    Player.physicsBody!.allowsRotation = false

    Ground.physicsBody = SKPhysicsBody(texture: SKTexture(imageNamed: "Ground"), size: Ground.size)
    Ground.physicsBody!.affectedByGravity = false
    Ground.physicsBody!.isDynamic = false

    // Obstacle
    func addObstacle1(){

        Obstacle1.position = CGPoint(x: self.frame.width / 2, y: -self.frame.height / 2 + Obstacle1.frame.height)
        Obstacle1.zPosition = 1
        addChild(Obstacle1)

        let distance = CGVector(dx: -self.frame.width, dy: 0)
        let moveDistance = SKAction.move(by: distance, duration: 5)
        Obstacle1.run(moveDistance)

    }

    let spawnObstacles = SKAction(addObstacle1())
    let delay = SKAction.wait(forDuration: 2)
    let sequence = SKAction.sequence([delay, spawnObstacles])

    run(SKAction.repeatForever(sequence))

}

首先将
添加障碍物
置于
didMove
方法之外。然后将以下内容放入您的
didMove
方法中:

_ = Timer.scheduledTimer(timeInterval: 2, target: self, selector: #selector(addObstacle1), userInfo: nil, repeats: true)

它应该每两秒钟重复一次你的
添加障碍物

首先将
添加障碍物
置于
didMove
方法之外。然后将以下内容放入您的
didMove
方法中:

_ = Timer.scheduledTimer(timeInterval: 2, target: self, selector: #selector(addObstacle1), userInfo: nil, repeats: true)

它应该每两秒钟重复一次你的
添加障碍物

当前代码有什么不起作用?它只生成和移动一次。我希望“永远重复”添加会导致它重复生成和移动。请尝试在函数
addbarriend
中设置障碍物纹理,而不是全局设置。您可以将障碍物声明保持为全局状态,只需在函数中设置其纹理。感谢您的输入,但这不会产生任何影响。请尝试在GameViewController中启用nodeCount,以查看它们是否被添加。当前代码有什么问题?它只生成和移动一次。我希望“永远重复”添加会导致它重复生成和移动。请尝试在函数
addbarriend
中设置障碍物纹理,而不是全局设置。您可以将障碍物声明保持为全局状态,只需在函数中设置其纹理。感谢您的输入,但这并没有什么区别。请尝试在GameViewController中启用nodeCount以查看是否添加了障碍物