Невозможно приостановить 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, об этих эмитентах.