无法在 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的主要内容,如果未能解决你的问题,请参考以下文章
更新 MPRemoteCommandCenter 播放/暂停按钮
如何在键盘视图和顶视图中添加自定义子视图? (iOS8 及以下无法在 iOS9 中使用)