2014-07-16 11 views
5

La mia situazione è che ho un GameMenuScene e dopo che l'utente ha scelto un livello, voglio presentare lo LevelScene. Ma io non voglio avere il precedente GameMenuScene scartato perché il LevelScene è in realtà un @property di GameMenuScene e se l'utente completa il livello deve essere salvato come un @property di LevelScene, che il GameMenuScene dovrebbe essere in grado di accedere dopo che l'utente termina o esce dal livello. Se uso semplicemente lo presentScene:transition, lo GameMenuScene viene scartato e le informazioni non possono tornare indietro.Presentare una scena in SpriteKit senza scartare la precedente?

La mia domanda: c'è un modo per impilare o spingere le scene l'una sopra l'altra senza scartare la precedente (preferibilmente utilizzando un'animazione di transizione)? Non sono riuscito a trovare un metodo per questo scopo specifico nella documentazione Apple per SKScene.

Nota: Un'altra risposta StackOverflow a una domanda simile suggerisce di creare un nuovo UIViewController, di presentare lo LevelScene e di presentare quindi lo UIViewController modally. Ma speravo che nella Documentazione di Apple esistesse un metodo che mi mancava per presentare la scena scena stessa in modo modale senza dover creare UIVIewControllers.

+0

Folletto Kit ha funzionalità di scena push/pop con transizioni, dovrebbe essere facile da estrarre/adattarsi: https://github.com/KoboldKit/KoboldKit/blob/master/KoboldKit/KoboldKitFree/Framework/View/KKView .m Si noti che le scene di "sfondo" non sono attive né disegnate mentre c'è una scena "spinta sopra quella più recente". – LearnCocos2D

+0

Si potrebbe anche provare a configurare un delegato per comunicare le scene avanti e indietro in modo che la seconda scena (la scena di livello) abbia accesso alla scena del menu. Inoltre, tutti gli altri livelli avrebbero lo stesso delegato per poter impostare un singolo metodo nel tuo menu per estrarre le informazioni da ogni livello. – romsearcher

risposta

2

Non esiste alcuna funzionalità simile a un controller di navigazione per SKScenes che consente di inserire e scoppiare scene. Dovrai scrivere codice per gestire e presentare le tue scene.

Ecco una semplice implementazione del controller di visualizzazione che consente di alternare tra due scene (scorrendo) senza scartare l'altra scena.

@interface ViewController() 

@property BOOL viewFlag; 
@property SKScene *scene1; 
@property SKScene *scene2; 

@end 

@implementation ViewController 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    // Configure the view. 
    SKView * skView = (SKView *)self.view; 
    skView.showsFPS = YES; 
    skView.showsNodeCount = YES; 

    UISwipeGestureRecognizer *swipeGesture = [[UISwipeGestureRecognizer alloc] 
               initWithTarget:self action:@selector(handleSwipeGesture:)]; 
    swipeGesture.direction = UISwipeGestureRecognizerDirectionRight; 
    [self.view addGestureRecognizer:swipeGesture]; 

    // Create and configure scene 1. 
    SKScene * scene = [MyScene sceneWithSize:skView.bounds.size]; 
    scene.scaleMode = SKSceneScaleModeAspectFill; 

    self.scene1 = scene; 

    // Present the scene 1. 
    [skView presentScene:scene]; 

    // Create and configure scene 2. 
    scene = [MySecondScene sceneWithSize:skView.bounds.size]; 
    scene.scaleMode = SKSceneScaleModeAspectFill; 

    self.scene2 = scene; 
} 

- (void) handleSwipeGesture:(id)sender 
{ 
    SKView * skView = (SKView *)self.view; 
    _viewFlag = !_viewFlag; 
    if (_viewFlag) { 
     [skView presentScene:_scene1]; 
    } 
    else { 
     [skView presentScene:_scene2]; 
    } 
} 

@end 
Problemi correlati