2015-09-23 16 views
15

Ho provato qualche soluzione alternativa, ma non riesco ancora a mettere in pausa le particelle esistenti su iOS9. Sto usando seguente tecnica per mettere in pausa la scena:Impossibile mettere in pausa SKEmitterNode in iOS9

  • pausa la scena con self.paused = YES;
  • impostare variabile personalizzata globalPause = YES; per controllare update: metodo di esecuzione (in quanto update: corre ancora, mentre scena è in pausa).

Il punto è che non metto in pausa la vista, ma piuttosto la scena. Non metto in pausa la vista, a causa di this.

Ecco il codice in grado di riprodurre questo problema in 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 

Quindi, esempio molto semplice che funziona su iOS8 e non funziona come previsto in iOS9. Quello che succede è che anche se tutto sembra in pausa, non è così. Le particelle esistenti dopo la mossa non ripetuta al punto in cui dovrebbero essere se la scena non è stata messa in pausa. Inoltre, sembra che le particelle mantengono la deposizione delle uova troppo, che può produrre ritardo notevole quando La riattivazione Se la pausa è stata lunga ...

Ecco uno screenshot da editor di particelle:

particle editor

Qualcuno ha qualche ragionevole spiegazione ? Finora ho cercato di mettere in pausa in modo esplicito l'emettitore:

emitterNode.paused = YES; 

Non ha funzionato, e in realtà questo dovrebbe essere fatto automaticamente quando la scena è in pausa (emettitore viene aggiunto alla scena). Un'altra cosa che viene provata è impostare emitter.particleSpeed = 0; e emitter.particleSpeedRange = 0; e emitter.particleBirthRate = 0; ma questo non ha effetto sulle particelle già esistenti (il che ha senso).

E questo è tutto. Non so se questo è un bug, ma sono a corto di idee ...

+0

Avete trovato qualche soluzione per mettere in pausa SKEmitterNode? – WangYudong

+0

@WangYudong Non proprio ... Stai riscontrando lo stesso problema? – Whirlwind

+1

Sì. In iOS 8, tutto era OK. E ho provato quello che hai detto nel tuo post e ho ottenuto gli stessi risultati. – WangYudong

risposta

1

Per mettere in pausa la scena:

currentScene.speed = 0 
currentScene.paused = true 

Per riattivare la scena

currentScene.speed = Variables.gameSpeed 
currentScene.paused = false 

fa quel lavoro per voi ?

PS: su che versione di iOS stai lavorando? Ho letto dei problemi con iOS9.1, che sembra essere corretto in 9.3, su quegli emettitori.

Problemi correlati