Задержка итераций цикла for - PullRequest
0 голосов
/ 16 мая 2018

Я боролся с этим некоторое время.У меня есть цикл for, который создает группу SKSpriteNodes и дает им физику и т. Д. Это, кажется, вызывает задержку в игровом процессе при запуске этого цикла.Я успешно отложил фактическое добавление spriteNodes, но, похоже, это не помогло с проблемой задержки.Я хотел бы иметь возможность запустить цикл for один раз, подождать немного времени, а затем запустить следующую итерацию.Возможно ли это?

func delay(_ delay:Double, closure:@escaping ()->()) {
    let when = DispatchTime.now() + delay
    DispatchQueue.main.asyncAfter(deadline: when, execute: closure)
}

func createRoadImages() {
    for (index, roadImage) in imageArrays.enumerated() {
        print(imageArrays)
        let roadSprite = SKSpriteNode(imageNamed: roadImage)
        roadSprite.anchorPoint = CGPoint(x: 0.5, y: 0.5)
        roadSprite.position = CGPoint(x: 0, y: CGFloat(screenCounter) * roadSprite.size.height)
        roadSprite.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: self.size.width, height: self.size.height))
        roadSprite.physicsBody?.friction = roadFriction
        roadSprite.physicsBody?.mass = backgroundMass
        roadSprite.physicsBody?.linearDamping = damping
        roadSprite.physicsBody?.categoryBitMask = PhysicsCategory.RoadImageCategory.rawValue
        roadSprite.physicsBody?.collisionBitMask = PhysicsCategory.NoCollisionsCategory.rawValue
        roadSprite.physicsBody?.contactTestBitMask = PhysicsCategory.BroomCategory.rawValue
        roadSprite.physicsBody?.affectedByGravity = false
        roadSprite.physicsBody?.isDynamic = true

        roadSprite.zPosition = 1
        roadSprite.name = "Road \(index)"

        delay(delayFor * Double(index)) {
            self.addChild(roadSprite)
            print("Sprite added \(index)")
        }
    }
}
...