我想要实现的目标很简单。我希望某些SKNodes(或子类的对象)在添加到场景后消失一定的时间。
当然,这可以通过在子类中实现一个计数器来轻松完成,该计数器会随着时间的推移而逐渐减少,并且一旦达到0就从场景中删除该节点。另一个想法是排队 SKAction.waitForDuration:< / em>动作以及之后从父项中删除节点的动作。
我希望在 SKNode 中已经有类似的东西,但是找不到任何有希望的东西。
我错过了什么或者我必须自己实施吗?
(请注意,这更多是关于了解SpriteKit而不是自己是否自行实现这一点的麻烦)
奖金问题如果第一个答案是(正如预期的那样)否: 什么是更有效的方法,使用前面提到的SKAction方法,或使用&#34;生命周期&#34;我的子类上的实例变量和一个方法,由Scene的update:方法调用,倒计时该变量? 我可能在我的场景中有很多这些对象,它们也可能持续超过几秒钟。
答案 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