在SpriteKit中呈现一个场景而不丢弃之前的?
我的情况是,我有一个GameMenuScene
和用户select一个级别后,我想呈现LevelScene
。 但是我不想让之前的GameMenuScene
被丢弃,因为LevelScene
实际上是LevelScene
的一个GameMenuScene
,用户是否完成这个级别将被保存为一个LevelScene
的@property
LevelScene
, GameMenuScene
应该能够访问用户结束或退出关卡。 如果我简单地使用presentScene:transition
,则GameMenuScene
被丢弃,并且信息不能传回。
我的问题:有没有一种方法来堆叠或推动场景而不丢弃之前(最好使用过渡animation)? 我无法在SKScene的Apple文档中find针对此特定用途的方法。
注意:另一个类似问题的StackOverflow答案build议创build一个新的UIViewController
,在那里呈现LevelScene
,然后以模态方式呈现UIViewController
。 但是我希望在Apple文档中有一个现有的方法,我错过了以模态方式呈现场景本身,而无需创buildUIVIewControllers
。
SKScenes没有像导航控制器一样的function,可以让你推送和popup场景。 您将需要编写代码来pipe理和呈现您的场景。
这里有一个简单的视图控制器实现,它允许你在两个场景之间切换(通过滑动),而不会丢弃其他场景。
@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