我尝试了一些解决方法,但我仍然无法将现有粒子暂停在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
因此,非常简单的示例iOS8
在iOS9
. 发生的情况是,即使一切看起来都暂停了,但事实并非如此。如果场景没有暂停,取消暂停后的现有粒子会移动到它们应该在的位置。此外,看起来粒子也在不断生成,如果暂停时间过长,在取消暂停时会产生明显的延迟......
这是粒子编辑器的屏幕截图:
有人有一些合理的解释吗?到目前为止,我已尝试显式暂停发射器:
emitterNode.paused = YES;
它没有用,实际上这应该在场景暂停时自动完成(将发射器添加到场景中)。尝试的另一件事是设置emitter.particleSpeed = 0;
以及emitter.particleSpeedRange = 0;
,emitter.particleBirthRate = 0;
但这不会影响已经存在的粒子(这是有道理的)。
就是这样。不知道这是否是一个错误,但我的想法已经用完了......