我已尝试了几种解决方案,但仍然无法在iOS9上暂停现有的粒子。我正在使用以下技术来暂停场景:
下面是可以重现该问题的代码(适用于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上无法按预期工作。发生的情况是,即使一切看起来都已暂停,实际上并没有。在取消暂停后,现有粒子会移动到它们应该在场景未暂停时出现的位置。此外,看起来粒子仍然会继续生成,如果暂停时间很长,取消暂停时可能会产生明显的延迟...
以下是来自粒子编辑器的屏幕截图:
是否有合理的解释?到目前为止,我已经尝试过显式暂停发射器:
emitterNode.paused = YES;
这没有生效,实际上当场景暂停时(发射器被添加到场景中)应该自动完成。另一个尝试的方法是设置 emitter.particleSpeed = 0;
以及 emitter.particleSpeedRange = 0;
和 emitter.particleBirthRate = 0;
但这不会影响已经存在的粒子(这是有道理的)。
就是这样。不确定这是否是一个错误,但是我已经没有更多的想法了...