【问题标题】:SKEmmitterNode not Running after First Time第一次后 SKEmitterNode 未运行
【发布时间】:2015-03-28 18:44:04
【问题描述】:

我用下面的代码创建了一个效果。我已经连接了一个按钮,它将作为测试触发。在第一次按下时,效果按预期工作。但是,在所有后续请求中,效果永远不会显示。我已经通过断点确定效果正在被调用,并且在第一次和后续运行中,它都进入了完成处理程序。我还检查了作为 runAction 的一部分的“totalTime”变量,并验证了它对于第一次运行和后续运行都是相同的(2 秒)。有趣的是,对于第一次运行,我确实观察到在前面的 if 语句和完成处理程序的断点之间有几秒钟的延迟。然而,对于所有后续运行,在前面的 if 和完成处理程序之间几乎没有延迟。我再次验证了所有运行的持续时间为 2 秒。最后,如果我在完成处理程序中注释掉[self.view setPaused:YES],效果每次都会运行。尽管如此,通过下面的代码,您可以看到场景之前没有暂停。我以这种方式暂停场景,因为这是一种偶尔的效果,我不想在没有生成这些效果的大部分时间使用额外的 CPU 和电池。

- (void) smokeEffectAtPosition:(CGPoint)position withDuration:(NSTimeInterval)duration andView:(SKView *)view andPosVector:(CGVector)vector
{
    SKEmitterNode *emitter =  [NSKeyedUnarchiver unarchiveObjectWithFile:[[NSBundle mainBundle] pathForResource:@"SmokeEffect" ofType:@"sks"]];

    emitter.position = position;

    // Calculate the number of particles we need to generate based on the duration
    emitter.particleBirthRate = 100;
    emitter.numParticlesToEmit = duration * emitter.particleBirthRate;
    emitter.particleLifetime = duration;
    emitter.particlePositionRange = vector;

    // Determine the total time needed to run this effect.
    NSTimeInterval totalTime = duration + emitter.particleLifetime + emitter.particleLifetimeRange/2;
    // Run action to remove the emitter from the scene

    if ([self.view isPaused])
        [self.view setPaused:NO];

    [emitter runAction:[SKAction sequence:@[[SKAction waitForDuration:totalTime],
                                            [SKAction removeFromParent]]]
            completion:^{
                if (![self.view isPaused])
                [self.view setPaused:YES];
            }];
    [self addChild:emitter];
}

【问题讨论】:

  • 在运行动作之前您是否尝试将发射器添加到其父级?
  • 很遗憾,这并没有解决问题。

标签: ios objective-c sprite-kit skemitternode


【解决方案1】:

在您[self addChild:emitter]; 之后添加此代码:[emitter resetSimulation];

【讨论】:

  • 不幸的是,这并没有改变任何东西。与描述的行为相同。
【解决方案2】:

原来问题出在通话上。我专注于暂停问题,因此呼叫部分似乎不是问题。但是,对类的调用处于循环中,因为这种影响可能发生在 x 个对象上。处于循环中会导致暂停相互“踩”。答案是将一组位置发送到上面的效果类。在该类中,我循环了效果,仅在呈现最后一个对象效果时才发出暂停。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-12
    • 2012-01-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多