无法在 iOS9 中暂停 SKEmitterNode
Unable to pause SKEmitterNode in iOS9
我已经尝试了一些解决方法,但我仍然无法暂停 iOS9
上的现有粒子。我正在使用以下技术暂停场景:
- 暂停场景
self.paused = YES;
- 设置自定义
globalPause = YES;
变量来控制 update:
方法执行(因为场景暂停时 update:
仍然 运行s)。
重点是我不暂停视图,而是暂停场景。我没有暂停视图,因为 。
这是可以在 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;
但这不会影响已经存在的粒子(这是有道理的)。
就是这样。不确定这是否是一个错误,但我 运行 没有想法...
暂停场景:
currentScene.speed = 0
currentScene.paused = true
取消暂停场景
currentScene.speed = Variables.gameSpeed
currentScene.paused = false
这对你有用吗?
PS:您正在使用哪个 iOS 版本?我读过有关 iOS9.1 的问题,这些问题似乎在 9.3 中得到了纠正,关于那些发射器。
我已经尝试了一些解决方法,但我仍然无法暂停 iOS9
上的现有粒子。我正在使用以下技术暂停场景:
- 暂停场景
self.paused = YES;
- 设置自定义
globalPause = YES;
变量来控制update:
方法执行(因为场景暂停时update:
仍然 运行s)。
重点是我不暂停视图,而是暂停场景。我没有暂停视图,因为
这是可以在 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;
但这不会影响已经存在的粒子(这是有道理的)。
就是这样。不确定这是否是一个错误,但我 运行 没有想法...
暂停场景:
currentScene.speed = 0
currentScene.paused = true
取消暂停场景
currentScene.speed = Variables.gameSpeed
currentScene.paused = false
这对你有用吗?
PS:您正在使用哪个 iOS 版本?我读过有关 iOS9.1 的问题,这些问题似乎在 9.3 中得到了纠正,关于那些发射器。