无法在 iOS9 中暂停 SKEmitterNode

Posted

技术标签:

【中文标题】无法在 iOS9 中暂停 SKEmitterNode【英文标题】:Unable to pause SKEmitterNode in iOS9 【发布时间】:2015-12-21 09:52:04 【问题描述】:

我尝试了几种解决方法,但我仍然无法暂停ios9 上的现有粒子。我正在使用以下技术来暂停场景:

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

重点是我不会暂停视图,而是暂停场景。因为this,我不会暂停视图。

这是可以在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

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

这是粒子编辑器的截图:

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

emitterNode.paused = YES;

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

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

【问题讨论】:

您是否找到了暂停 SKEmitterNode 的解决方法? @WangYudong 不是真的...你遇到同样的问题吗? 是的。在 iOS 8 中,一切正常。我尝试了您在帖子中所说的内容,并得到了相同的结果。 看起来粒子的模拟时间在 9.1 中没有暂停,但是在 9.3 中暂停是固定的,我想知道是否有一个通知被调用来暂停它的粒子 是的,我也不喜欢他们,但苹果真的没有选择,我不喜欢强迫人们升级手机或不使用我的应用程序(我的 6+ 是仍在 iOS 8 上) 【参考方案1】:

暂停场景:

currentScene.speed = 0
currentScene.paused = true

取消暂停场景

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

这对你有用吗?

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

【讨论】:

以上是关于无法在 iOS9 中暂停 SKEmitterNode的主要内容,如果未能解决你的问题,请参考以下文章

UIActionSheet 无法在 iOS9 中按预期显示

更新 MPRemoteCommandCenter 播放/暂停按钮

无法在 iOS 9 中检查互联网连接

如何在键盘视图和顶视图中添加自定义子视图? (iOS8 及以下无法在 iOS9 中使用)

为什么无法在ios9门户网站页面上获取localStorage?

iOS9 Share Extension 无法在 Xcode 上调试