Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios SKEmmitterNode在第一次运行后未运行_Ios_Objective C_Sprite Kit_Skemitternode - Fatal编程技术网

Ios SKEmmitterNode在第一次运行后未运行

Ios SKEmmitterNode在第一次运行后未运行,ios,objective-c,sprite-kit,skemitternode,Ios,Objective C,Sprite Kit,Skemitternode,我用下面的代码创建了一个效果。我已经接通了一个按钮,可以启动这个作为测试。第一次按下时,效果按预期工作。但是,在所有后续请求中,效果永远不会显示。我已经通过断点确定正在调用效果,并且在第一次运行和后续运行时,它都将进入完成处理程序。作为runAction的一部分,我还检查了“totalTime”变量,并验证了它在第一次运行和后续运行中是相同的(2秒)。有趣的是,在第一次运行中,我观察到前面的if语句和完成处理程序的断点之间有几秒钟的延迟。但是,对于所有后续运行,在前面的if和完成处理程序之间几乎

我用下面的代码创建了一个效果。我已经接通了一个按钮,可以启动这个作为测试。第一次按下时,效果按预期工作。但是,在所有后续请求中,效果永远不会显示。我已经通过断点确定正在调用效果,并且在第一次运行和后续运行时,它都将进入完成处理程序。作为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];
}

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

原来问题出在电话上。我专注于暂停问题,因此通话部分似乎没有问题。但是,对该类的调用处于循环中,因为这种效果可能会发生在x对象上。处于循环中会导致暂停相互“跨步”。答案是向上面的effects类发送一个位置数组。在该类中,我循环了效果,只在渲染最后一个对象效果时发出暂停。

在运行操作之前是否尝试将发射器添加到其父对象?不幸的是,这并不能解决问题。不幸的是,这没有改变任何东西。与描述的行为相同。