15

我尝试了一些解决方法,但我仍然无法将现有粒子暂停在iOS9. 我正在使用以下技术暂停场景:

  • 暂停场景self.paused = YES;
  • 设置自定义globalPause = YES;变量以控制update:方法执行(因为update:在场景暂停时仍会运行)。

关键是我不会暂停视图,而是暂停场景。因为这个,我不会暂停视图。

这是可以在以下位置重现此问题的代码iOS9

#import "GameScene.h"

@interface GameScene ()

@property (nonatomic, strong)SKEmitterNode *emitter;

@end

@implementation GameScene


-(void)didMoveToView:(SKView *)view {


    [self addChild:[self getSpaceDustEmitter]];

}

//No need for this method though :)

-(SKEmitterNode*)getSpaceDustEmitter{

    self.emitter =  [NSKeyedUnarchiver unarchiveObjectWithFile:[[NSBundle mainBundle] pathForResource:@"spacedust" ofType:@"sks"]];
     self.emitter .name = @"emitter_spacedust";
    self.emitter .position = CGPointMake(CGRectGetMidX(self.frame),self.frame.size.height);



    return  self.emitter ;
}


@end

因此,非常简单的示例iOS8iOS9. 发生的情况是,即使一切看起来都暂停了,但事实并非如此。如果场景没有暂停,取消暂停后的现有粒子会移动到它们应该在的位置。此外,看起来粒子也在不断生成,如果暂停时间过长,在取消暂停时会产生明显的延迟......

这是粒子编辑器的屏幕截图:

粒子编辑器

有人有一些合理的解释吗?到目前为止,我已尝试显式暂停发射器:

emitterNode.paused = YES;

它没有用,实际上这应该在场景暂停时自动完成(将发射器添加到场景中)。尝试的另一件事是设置emitter.particleSpeed = 0;以及emitter.particleSpeedRange = 0;emitter.particleBirthRate = 0;但这不会影响已经存在的粒子(这是有道理的)。

就是这样。不知道这是否是一个错误,但我的想法已经用完了......

4

1 回答 1

1

暂停场景:

currentScene.speed = 0
currentScene.paused = true

取消暂停场景

currentScene.speed = Variables.gameSpeed
currentScene.paused = false

那对你有用吗?

PS:你正在开发什么iOS版本?我已经阅读了有关这些发射器的 iOS9.1 问题,这似乎在 9.3 中得到了纠正。

于 2016-06-24T09:21:08.077 回答