Невозможно приостановить SKEmitterNode в 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
Итак, очень простой пример, который работает на iOS8
и не работает, как ожидалось iOS9
, То, что происходит, - то, что, даже если все выглядит, что приостановлено, это не так. Существующие частицы после бездействия перемещаются в точку, в которой они должны быть, если сцена не была приостановлена. Кроме того, похоже, что частицы тоже нерестятся, что может привести к заметному запаздыванию при бездействии, если пауза была долгой...
Вот скриншот из редактора частиц:
У кого-нибудь есть разумное объяснение? До сих пор я пытался явно приостановить излучатель:
emitterNode.paused = YES;
Это не сработало, и фактически это должно быть сделано автоматически, когда сцена приостановлена (эмиттер добавлен в сцену). Еще одна вещь, которую пытались установить emitter.particleSpeed = 0;
так же как emitter.particleSpeedRange = 0;
а также emitter.particleBirthRate = 0;
но это не влияет на уже существующие частицы (что имеет смысл).
И это все. Не уверен, что это ошибка, но у меня закончились идеи...
1 ответ
Чтобы приостановить сцену:
currentScene.speed = 0
currentScene.paused = true
Чтобы приостановить сцену
currentScene.speed = Variables.gameSpeed
currentScene.paused = false
Это работает для вас?
PS: над какой версией iOS вы работаете? Я читал о проблемах с iOS9.1, которая, кажется, исправлена в 9.3, об этих излучателях.