我有一个SKSpriteNodes数组(虽然,为了这个问题的目的,他们也可能是UIViews [概念应该是相同的两种方式])。我试图将第一个元素添加到视图,开始3秒延迟,将第二个元素添加到视图,开始3秒延迟等等。我最初的想法是使用NSTimer的递归函数,但我是不确定这是最好的方式。有小费吗?
答案 0 :(得分: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];
以下是使用块的一些参考: