我的情况是我有一个 GameMenuScene
,在用户选择关卡后,我想呈现 LevelScene
。但是我不想丢弃之前的 GameMenuScene
因为 LevelScene
实际上是 GameMenuScene
的 @property
并且用户是否完成关卡将被保存为 LevelScene
的 @property
,GameMenuScene
应该能够在用户完成或退出关卡。如果我简单地使用 presentScene:transition
,GameMenuScene
将被丢弃,信息无法传回。
我的问题:有没有一种方法可以将场景堆叠或推到彼此之上而不丢弃之前的场景(最好使用过渡动画)?我在 SKScene 的 Apple 文档中找不到用于此特定目的的方法。
注意:另一个 StackOverflow 对类似问题的回答建议创建一个新的 UIViewController
,在其中显示 LevelScene
,然后显示 UIViewController
模态地。但我希望 Apple 文档中有一种我错过的现有方法,它可以模态地呈现场景本身,而无需创建 UIVIewControllers
。
最佳答案
SKScenes 没有类似于导航 Controller 的功能,可让您推送和弹出场景。您将需要编写代码来管理和呈现您的场景。
这是一个简单的 View Controller 实现,它允许您在两个场景之间切换(通过滑动)而不会丢弃另一个场景。
@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
关于ios - 在不丢弃前一个场景的情况下在 SpriteKit 中呈现一个场景?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24784814/