2014-07-16 17 views
5

Durumumda, GameMenuScene var ve kullanıcı bir seviye seçtikten sonra, LevelScene'u sunmak istiyorum. Ama LevelScene aslında GameMenuScene bir @property ve kullanıcı seviyesini tamamlar olsun veya olmasın GameMenuScene kullanıcıya sonra erişmek mümkün olmalıdır LevelScene bir @property olarak kaydedilecek çünkü önceki GameMenuScene atmış istemiyoruz Seviyeyi bitirir veya çıkar. Yalnızca presentScene:transition kullanırsam, GameMenuScene atılır ve bilgi geri gelemez.SpriteKit'te bir sahneyi öncekileri göz ardı etmeksizin sunmak?

Soruma Soru: Bir önceki ekrana atmadan (tercihen bir geçiş animasyonu kullanarak) sahneleri birbiri üzerine yığmanın veya itmenin bir yolu var mı? Bu özel amaç için SKScene için Apple Documentation'da bir yöntem bulamadım.

Not: Başka bir StackOverflow yanıtı, yeni bir UIViewController oluşturulmasını, LevelScene'un orada sunulmasını ve ardından UIViewController modelini hazırlamanızı önerir. Ama Apple Documentation'da varolan bir yöntemi, UIVIewControllers oluşturmak zorunda kalmadan, sahne sahnesini sahneye sunmayı özlediğimi umuyordum.

+0

Kobold Kiti geçişler ile itme/pop sahnesi işlevselliğe sahip, uyarlamak/ayıklamak kolay olmalıdır: https://github.com/KoboldKit/KoboldKit/blob/master/KoboldKit/KoboldKitFree/Framework/View/KKView .m "Arka plan" sahnelerinin aktif olmadığına ve "en yakın olanın üstüne itilmiş" bir sahne varken çekilmediğine dikkat edin. – LearnCocos2D

+0

Ayrıca sahneleri ileri ve geri iletmek için bir temsilci ayarlamayı deneyebilirsiniz, böylece ikinci sahneniz (seviye sahnesi) menü sahnesine erişime sahip olur. Ayrıca, diğer seviyelerinizin tümü, her seviyede bilgileri ayıklamak için menünüzde tek bir yöntem ayarlayabilmeniz için aynı delege sahip olacaktır. – romsearcher

cevap

2

SKScenes için gezinme denetleyicisi benzeri bir özellik yoktur, bu da sahneleri itip çekmenize izin verir. Sahnelerinizi yönetmek ve sunmak için kod yazmanız gerekecek.

İki sahneyi (kaydırarak) diğer sahneyi atmadan değiştirebilmenizi sağlayan basit bir görünüm denetleyicisi uygulaması.

@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 
İlgili konular