Как создать узел SKSprite один за другим в цикле For с помощью Swift SpriteKit - PullRequest
0 голосов
/ 08 июня 2018

Я хочу создать 10 узлов SKSPrite через цикл For.Я хочу, чтобы узлы появлялись один за другим, но с моим кодом все 10 узлов появляются одновременно.Увеличение продолжительности ожидания не помогает.Заранее спасибо.

for i in 1 ... 10 {

    self.stone[i - 1].position = CGPoint(x: 0 , y: -100)
    self.stone[i - 1].anchorPoint = CGPoint(x: 0.5, y: 0.5)
    self.stone[i - 1].size = CGSize(width: 50, height: 50)
    self.stone[i - 1].physicsBody = SKPhysicsBody(circleOfRadius: 20)
    self.stone[i - 1].physicsBody!.affectedByGravity = false
    self.stone[i - 1].physicsBody!.categoryBitMask = PhysicsCategory.Object1
    self.stone[i - 1].zPosition = 2
    self.addChild(self.stone[i - 1])   

    let actionMove = SKAction.move(to: CGPoint(x: 0, y: 0), duration: 0.3)
    let actionRolling = SKAction.animate(with: stone[i - 1].arrayTexture, timePerFrame: 0.05)
    let actionDelay = SKAction.wait(forDuration: 1.0)
    let actionSequence = SKAction.sequence([actionMove,actionRolling,actionDelay])
    stone[i - 1].run(actionSequence)
}

1 Ответ

0 голосов
/ 08 июня 2018

все, что вы делаете в своем коде, это создание цикла, который создает узлы, любая длительность, которую вы применяете к этим узлам в этом цикле, будет одинаково влиять на них.Вам нужна переменная вне цикла, которая увеличивается в цикле на каждый экземпляр узла.

var delay: Double = 1.0 

for i in 1 ... 10 {

    self.run(.wait(forDuration: delay) {

        self.stone[i - 1].position = CGPoint(x: 0 , y: -100)
        self.stone[i - 1].anchorPoint = CGPoint(x: 0.5, y: 0.5)
        self.stone[i - 1].size = CGSize(width: 50, height: 50)
        self.stone[i - 1].physicsBody = SKPhysicsBody(circleOfRadius: 20)
        self.stone[i - 1].physicsBody!.affectedByGravity = false
        self.stone[i - 1].physicsBody!.categoryBitMask = PhysicsCategory.Object1
        self.stone[i - 1].zPosition = 2
        self.addChild(self.stone[i - 1])   

        let actionMove = SKAction.move(to: CGPoint(x: 0, y: 0), duration: 0.3)
        let actionRolling = SKAction.animate(with: stone[i - 1].arrayTexture, timePerFrame: 0.05)
        let actionDelay = SKAction.wait(forDuration: 1.0)
        let actionSequence = SKAction.sequence([actionMove,actionRolling,actionDelay])
        stone[i - 1].run(actionSequence)
    }

    delay += 1.0
}
...