2013-09-28 20 views
5

我有以下代碼:SKAction序列是否真的等到動作結束?

-(void)aggravatedSeek:(SKSpriteNode *)target{ 
    _isAggravated = YES; 

    SKAction *action = [SKAction runBlock:^{ 
     double randTime = 0.2; 
     NSLog(@"%f", randTime); 
     [self moveToSpriteNode:target withTimeInterval:randTime]; 
    }]; 

    //SKAction *repeatAction = [SKAction repeatAction:action count:6]; 
    SKAction *rep = [SKAction sequence:@[action, action, action, action, action]]; //Test Sequence 

    [self runAction:rep completion:^{ 
     [self runAction:blackColorAction]; 
     _isAggravated = NO; 

    }]; 
} 

我希望我的行動實際上等到前一個動作就完成了。意思是,我的行爲需要排序,以使rep動作不會重複action動作,直到對象完成移動。目前,似乎輸出立即運行所有的動作,並不像它應該那樣對它們進行排序。我已經閱讀了文檔,現在我所擁有的是他們所說的...

回答

4

runBlock:動作是一種一次性的動作。它會一次運行該塊,然後緊接着動作「結束」。

你想要的是某些動作不是爲了處理而設計的。他們運行一次,或一段時間(持續時間)。然而,他們不會運行,直到滿足任意條件 - 這可能是真實的,最終可能會變成真,也可能永不成真。這種操作使得所有可變的時序特徵無效(即線性與簡化時間縮放)。

你可以做的是發出「moveToSpriteNode」動作作爲一個動作,並分別檢查更新方法是否精靈已經到達節點。如果是這樣,你會運行下一個移動動作(不使用序列)。

更簡單地,您可以簡單地依靠移動動作來結束意思,即精靈已經到達目標節點。然後這將觸發序列中的下一個移動動作。如果您想在每個目標上運行完成塊,只需在完成塊內安排下一個移動操作即可。