arc4random函数随机执行double或triple

时间:2018-04-19 16:24:20

标签: ios swift sprite-kit arc4random

我的代码中有一个函数,每30-90秒随机产生1次幂。但是由于某种原因,函数double或tripple每3-4次执行一次。感谢Ron Myschuk提供了关于它现在的帮助,但它现在还没有完全正常运行,我希望有人可以在功能中找到错误。

这些函数基本上会选择一个随机间隔在30-90秒之间等待,然后触发其中一个功率函数。它然后调用自己并重新选择一个30-90秒之间的新间隔,然后选择一个新的随机电源来重复并重复,并重复和重复...

func spawnRandomPowerup() {

    let waitForNextPowerUp = TimeInterval(CGFloat(arc4random() % 5) + 10)
    print("- Next PowerUp spawns in \(waitForNextPowerUp) seconds")

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

        let powerup = Int(arc4random_uniform(UInt32(3)))
        print("PowerUp: \(powerup)")

        var spawnPowerUp: SKAction!

        if powerup == 0 {
            spawnPowerUp = SKAction.run(self.spawnALifePowerUp)
            self.run(spawnPowerUp, withKey: "spawningLifePowerUps")
        }
        else if powerup == 1 {
            spawnPowerUp = SKAction.run(self.spawnAShieldPowerUp)
            self.run(spawnPowerUp, withKey: "spawningShieldPowerUps")
        }
        else if powerup == 2 {
            spawnPowerUp = SKAction.run(self.spawnARapidFirePowerUp)
            self.run(spawnPowerUp, withKey: "spawningRapidFirePowerUps")
        }

        self.spawnRandomPowerup()
    }
}

我厌倦了一些事情,例如使用self.removeAllActions()启动函数,但这只会让事情变得更糟。提前感谢您查看此内容。

1 个答案:

答案 0 :(得分:0)

我在startNewLevel函数中发布了spawnRandomPowerup()调用而不是startGame函数,这导致每次达到100点时都会触发spawnRandomPowerup()调用。

再次感谢Ron帮助我找到这个。从这个家伙那里学到很多东西!