Swift - Timer.scheduledTimer.timeInterval问题 - 增加节点生成率

时间:2017-06-13 22:23:45

标签: swift timer

我正在制作一个简单的SpriteKit游戏,其中物品掉落,我需要根据当前分数管理物品生成速度。但是我遇到了Timer.scheduledTimer的问题。

func manageItemsSpawnSpeed() {
    if score < 10 {
        itemsSpawnTimeInterval = 1.0
    } else if score >= 10 && score < 20 {
        itemsSpawnTimeInterval = 0.9
    } else if score >= 20 && score < 50 {
        itemsSpawnTimeInterval = 0.8
    } else if score >= 50 && score < 100 {
      itemsSpawnTimeInterval = 0.7
    }...

spawnItems() - 在随机位置

生成屏幕顶部的项目
func spawnItems() {
    self.scene?.addChild(itemController.spawnItems())
}

这是项目spawn计时器,目前我只在游戏开始时调用它

func theSpawntimer() {
    Timer.scheduledTimer(timeInterval: TimeInterval(itemsSpawnTimeInterval), target: self, selector: #selector(GameplayScene.spawnItems), userInfo: nil, repeats: true)
}

因此,当分数改变时 - itemsSpawnTimeInterval更新得很好,但每当我再次调用theSpawntimer()时,它也会启动额外的spawnItems(),而不是增加产生的速度 - 它会让游戏中的项目下雨。

请告知如何在itemsSpawnTimeInterval更改时每次调用theSpawntimer()而不调用spawnItems()。 有可能吗?

1 个答案:

答案 0 :(得分:0)

要解决此问题,我拒绝使用scheduledTimer。相反,我使用了SKAction:

func theSpawner() {
    removeAction(forKey: spawnKey) // remove previous action if running.
    let spawnAction = SKAction.run(spawnItems)
    let spawnDelay = SKAction.wait(forDuration: itemsSpawnTimeInterval)
    let spawnSequence = SKAction.sequence([spawnAction, spawnDelay])
    run(SKAction.repeatForever(spawnSequence), withKey: spawnKey) // run action with key so you can cancel it later