2016-09-21 8 views
0

columnTime 동안 대기 동작을 실행 한 다음 코드 블록을 실행하는 코드가 있습니다. 실행, 4.95 초에 열 시간을 감소 5 초 동안 기다린 실행 블록 코드 : 이것은, 다음 등 다음 시간을 기다린 후 차단, 나는 다음 원하는무기한 감소 간격으로 대기 동작을 수행하는 함수

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 

을 대기 시간을 한 번 실행 블록 결과 4.95 초를 기다리고, 4.90 초로 대기 시간을 줄이는 블록 코드를 실행하고 4.90 초를 실행합니다.

다음을 시도했지만 반복적으로 각 동작을 반복 실행하므로 대기가 없습니다. 출력이 대기 및 블록 코드 블록의 print 문으로 가득차 있습니다.

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