2013-12-08 57 views
1

我有一個SKSpriteNodes數組(儘管爲了這個問題的目的,它們也可能是UIViews [概念應該是相同的方式])。我試圖在視圖中添加第一個元素,開始3秒延遲,將第二個元素添加到視圖,開始3秒延遲等等。我最初的想法是使用NSTimer的遞歸函數,但是我不知道這是最好的方式。有小費嗎?逐個顯示數組中的每個元素

+0

'for(int i = 0;我<[yourArray count]; ++ i)' – nhgrif

+0

@nhgrif問題是如何在每個元素之間以3秒的延遲逐個顯示每個元素。 – godel9

+0

「NSTimer」有什麼問題? – nhgrif

回答

2

選項1

SKAction使用與performSelector

self.nextIndex = 0; 
SKAction *action = [SKAction sequence:@[[SKAction waitForDuration:3.0], 
             [SKAction performSelector:@(addNextItem) onTarget:self]]]; 
[self runAction:action]; 

然後,定義addNextItem

- (void)addNextItem 
{ 
    [self addChild:myArray[self.nextIndex++]]; 
    if(self.nextIndex < [myArray count]) { 
     SKAction *action = [SKAction sequence:@[[SKAction waitForDuration:self.nextWait], 
               [SKAction performSelector:@(addNextItem) onTarget:self]]]; 
     [self runAction:action]; 
    } 
} 

選項2

如果你熟悉塊,你可以使用塊這種類型的事情還有:

__block NSUInteger index = 0; 
void (^addItem)(void) = ^(void) { 
    SKNode *node = myArray[index++]; 
    [self addChild:node]; 
}; 
SKAction *action = [SKAction sequence:@[[SKAction waitForDuration:3.0], 
             [SKAction runBlock:addItem], 
             [SKAction waitForDuration:3.0], 
             [SKAction runBlock:addItem], 
             [SKAction waitForDuration:3.0], 
             [SKAction runBlock:addItem], 
             [SKAction waitForDuration:3.0], 
             [SKAction runBlock:addItem]]]; 
[self runAction:action]; 

以下是使用塊的一些參考:

+0

中創建的方法似乎很笨重,這似乎是一個不錯的解決方案。然而,我對塊的概念相對陌生,你有沒有什麼好的聯繫?另外,如果延遲時間必須能夠改變黑白元素的添加呢?這個解決方案是否會擴展到這種情況 – Monkeyanator

+0

@Monkeyanator嗯...塊是非常棘手。它們是一種閉合形式,所以如果你不熟悉閉包,那麼可能會有一個陡峭的學習曲線。我添加了第二個選項,可以避免可能對您更好的塊。 – godel9

+0

好吧,非常感謝! – Monkeyanator

相關問題