Я боролся с этим некоторое время.У меня есть цикл 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)")
}
}
}