无法在iOS9中暂停SKEmitterNode

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

这是一个非常简单的例子,在上可以正常工作,但在iOS9上无法按预期工作。发生的情况是,即使一切看起来都已暂停,实际上并没有。在取消暂停后,现有粒子会移动到它们应该在场景未暂停时出现的位置。此外,看起来粒子仍然会继续生成,如果暂停时间很长,取消暂停时可能会产生明显的延迟...

以下是来自粒子编辑器的屏幕截图:

particle editor

是否有合理的解释?到目前为止,我已经尝试过显式暂停发射器:

emitterNode.paused = YES;

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

就是这样。不确定这是否是一个错误,但是我已经没有更多的想法了...


你找到任何暂停SKEmitterNode的解决方法了吗? - WangYudong
@WangYudong 不是很确定... 你遇到了同样的问题吗? - Whirlwind
1
是的。在iOS 8中,一切都很好。我尝试了你在帖子中提到的方法,得到了相同的结果。 - WangYudong
1
似乎在9.1版本中粒子仿真时间无法暂停,但在9.3版本中已修复了该问题。我想知道是否有通知被调用来使粒子暂停。 - Knight0fDragon
1
是的,我也不喜欢它们,但苹果真的没有给选择的余地,而我也不喜欢强迫别人升级手机或不使用我的应用程序(我的6+仍在iOS 8上)。 - Knight0fDragon
显示剩余16条评论
1个回答

1

暂停场景:

currentScene.speed = 0
currentScene.paused = true

恢复场景

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

你对此有何看法?

附:你使用的iOS版本是多少?我了解到在iOS9.1上存在问题,但在9.3中已经得到了修复,特别是与那些发射器相关的问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接