2016-09-21 60 views
0

我有一段代码,它运行一个持续时间为columnTime的等待操作,然后运行一段代码。这导致该块运行一次,然后等待时间,那么在块,然后等待时间等函数以无限期递减的间隔运行等待操作

func startSpawning(){ 
    print(columnTime) 
    let wait = SKAction.waitForDuration(columnTime) 
    let block = SKAction.runBlock({[unowned self] in self.spawnObstacle()}) 
    let sequence = SKAction.sequence([wait, block]) 
    runAction(SKAction.repeatActionForever(sequence), withKey: "spawning") 
} //startSpawning 

我想以下几点:等待5秒钟,运行阻滞代码从而降低柱时间4.95秒,跑等待4.95秒,运行阻止代码等待时间减少到4.90秒,运行等待4.90秒,等等。

我试过以下,但它一遍又一遍地运行每一个动作,没有任何等待。我的输出用来自等待和块代码块的打印语句洪泛。

func startSpawning(){ 
    let wait = SKAction.runBlock({[unowned self] in self.waitFunc()}) 
    let block = SKAction.runBlock({[unowned self] in self.spawnObstacle()}) 
    let sequence = SKAction.sequence([wait, block]) 
    runAction(SKAction.repeatActionForever(sequence), withKey: "spawning") 
} //startSpawning 
func waitFunc() -> SKAction{ 
    print("running wait func") 
    return SKAction.waitForDuration(getColumnTime()) 
} 
func getColumnTime() -> NSTimeInterval { 
    return columnTime 
} 

回答

1

你不理解变量是如何工作的,一旦你分配等待序列,就是这样。序列将始终是创建时分配的任何内容。创建一个新实例不会解决这个问题,因为旧的实例仍然在序列中。除了重复操作,您需要在每次运行序列时产生一组新的操作:

var columnTime : NSTimeInterval = 10 

func startSpawning(){ 
    let wait = SKAction.waitForDuration(columnTime) 
    let block = SKAction.runBlock() 
       { 
        [unowned self] in 
        columnTime -= 0.1 
        self.spawnObstacle() 
        self.startSpawning() 
       } 
    let sequence = SKAction.sequence([wait, block]) 
    removeActionForKey("spawning") 
    runAction(sequence, withKey: "spawning") 
} 
+0

这不是一次只能执行一次操作吗? – lelephant

+0

不,你在序列的结尾调用startSpawning()来开始一个新的序列 – Knight0fDragon

+0

不可思议!这就是我要说的,但有一个评论字符长度,所以我也写了这个句子 – lelephant