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

Другие вопросы по тегам