SKNode的生命周期

时间:2014-07-11 19:39:20

标签: objective-c sprite-kit

我想要实现的目标很简单。我希望某些SKNodes(或子类的对象)在添加到场景后消失一定的时间

当然,这可以通过在子类中实现一个计数器来轻松完成,该计数器会随着时间的推移而逐渐减少,并且一旦达到0就从场景中删除该节点。另一个想法是排队 SKAction.waitForDuration:< / em>动作以及之后从父项中删除节点的动作。

我希望在 SKNode 中已经有类似的东西,但是找不到任何有希望的东西。

我错过了什么或者我必须自己实施吗?

(请注意,这更多是关于了解SpriteKit而不是自己是否自行实现这一点的麻烦)

奖金问题如果第一个答案是(正如预期的那样)否: 什么是更有效的方法,使用前面提到的SKAction方法,或使用&#34;生命周期&#34;我的子类上的实例变量和一个方法,由Scene的update:方法调用,倒计时该变量? 我可能在我的场景中有很多这些对象,它们也可能持续超过几秒钟。

2 个答案:

答案 0 :(得分:4)

SKNode并非旨在处理定时删除等操作。

SKAction旨在处理这些类型的事情,例如:

SKAction *actionWait = [SKAction waitForDuration:3];
SKAction *actionRemove = [SKAction removeFromParent];
SKAction *sequence = [SKAction sequence:@[actionWait, actionRemove]];

[self runAction:sequence];

如果您愿意,您可以将SKNode子类化,并将该代码包装到方法中或创建类别并实现该方法。

答案 1 :(得分:0)

是的,没有定时删除方法。

有几种方法可以做到这一点。阅读你的问题我想到了一个简单的方法,它将节点名称作为参数,枚举具有该名称的子项并删除它们。名称必须是唯一的,但可以是两个或多个节点的名称,以对所有节点起作用。无论如何,一种方法。

像这样的东西

-(void)timedNodeRemoval:(NSString *)name timer:(NSTimer *)timer {
    [self enumerateChildNodesWithName:name usingBlock:^(SKNode *node, BOOL stop) {
        [node removeFromParent];
        [timer invalidate];
    }];
}

// Your node creation code...


// Completion block that calls timedNodeRemoval:timer