Я пробовал несколько обходных путей, но все равно не могу приостановить существующие частицы на 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;
, но это не влияет на уже существующие частицы (что имеет смысл).
Вот и все. Не уверен, что это ошибка, но у меня закончились идеи...
advanceSimulationTime
, чтобы сбросить его при снятии с паузы. - person Knight0fDragon   schedule 13.04.2016