【发布时间】:2013-11-16 14:21:05
【问题描述】:
我有一个带有子 SKEmitterNode 的 SKShapeNode。我附加了一个 SKAction 序列,其中最后一个操作是 removeFromParent。节点在没有发射器的情况下正常运行,执行它的操作然后移除自身。但是,如果附加了发射器,那么当删除 shapenode 时,整个程序会崩溃(执行跳转到 main 方法并似乎挂起)。
-(void)fireLasers
{
SKShapeNode* laser1 = [[SKShapeNode alloc] init];
//laser1 configuration removed for brevity
NSString *laserParticlePath = [[NSBundle mainBundle] pathForResource:@"LaserParticle" ofType:@"sks"];
SKEmitterNode *laserFire = [NSKeyedUnarchiver unarchiveObjectWithFile:laserParticlePath];
[laser1 addChild:laserFire];
SKAction* s1 = [SKAction moveByX:0 y:1000 duration:1.0];
SKAction* s2 = [SKAction removeFromParent];
SKAction* sequence = [SKAction sequence:@[s1, s2]];
[laser1 runAction:sequence];
[self.parent addChild:laser1];
}
程序将在这两种情况下运行:
- 我没有安装发射器
- 我不包含 removeFromParent 操作
我猜如果我在 shapenode 被移除之前将动作附加到发射器以 removeFromParent(例如 0.9 秒之后),这将起作用,但这似乎是一个乏味的长期解决方案。
有谁知道将 removeFromParent 应用于父节点的具有子节点的节点会发生什么情况,或者我该如何解决这个问题?
根据 LearnCocos2D 的回答更新
在我的完整代码中,我实际上是在创建一个如上所述的激光器,然后将其复制到第二个激光器。我从下面使用了 LearnCocos2D 的代码,它适用于一个激光器,但对两个激光器无效。根据 LearnCocos2D 的回答,我的代码的重要更改是:
laserFire.name = @"laserfire";
SKAction* s2 = [SKAction runAction:[SKAction removeFromParent] onChildWithName:@"laserfire"];
为laserfire命名并根据该名称从父级中删除它在克隆激光以供我希望同时发射多个激光时使用。
【问题讨论】:
标签: objective-c sprite-kit skemitternode