当我完成我的SKScene时,有没有办法从我的SKScene课程中解雇SKScene?
如果没有回到我的ViewController中,我在那里展示我的SKScene [skView presentScene:theScene];
有没有办法重新启动场景或从我的SKView中删除?
SKScene Class Reference和SKView Class Reference 没有帮助。
更新
以下代码从我的SKView [yourSKView presentScene:nil];
中删除了我的场景,但当我回到我的视图控制器中时,场景仍然在后台运行。我总是可以在游戏结束时暂停它并将其发送回我的视图控制器(菜单),但我想知道是否还有其他方法,然后暂停它就像完全删除它一样?
-(void)endTheGame {
[highscoreLabel removeFromSuperview];
NSLog(@"Game Over");
//would like to end here before calling the below method in my view controller
[self.delegate mySceneDidFinish:self];
}
答案 0 :(得分:12)
在遇到类似的问题后,我偶然发现了你的问题,而且由于没有人在这里给出了正确的答案,我是如何解决它的:
[self removeFromParent]; [self.view presentScene:nil];
这是我的Swift代码,即使你使用的是Objective C,你也能理解它的作用;关键是“if skView.scene == nil”测试:
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
let skView = self.view as SKView
if skView.scene == nil {
let scene = GameScene(size:skView.bounds.size)
scene.controller = self
skView.ignoresSiblingOrder = true
scene.scaleMode = .AspectFill
skView.presentScene(scene)
}
}
答案 1 :(得分:11)
您可以使用:
[yourSKView presentScene:nil];
删除场景。
答案 2 :(得分:4)
"你不能去"回到View Controller"从一个场景。场景是视图,视图控制器控制并显示视图。使用视图控制器更改视图。请记住,视图控制器本身不是视图。" -Wharbio
此处的最佳解决方案是创建另一个视图控制器。这个视图控制器将是我的菜单。然后另一个viewcontroller将充当skscene的主机。
在我的情况下,我然后使用我的菜单viewcontroller来关闭在skview中显示的viewcontroller。
答案 3 :(得分:2)
在SKScene
内,您只需[self.view presentScene:aNewScene]
即可展示另一个场景
答案 4 :(得分:2)
我在视图控制器中使用此块完全删除了场景: 显然,您需要声明您的尺寸,以及" newSKview"
SKView * skView = (SKView *)self.view;
SKScene *newScene = [[newSKView alloc]initWithSize:size];
newScene.scaleMode = SKSceneScaleModeAspectFill;
SKScene *oldScene=(skView.scene);
[oldScene removeFromParent];
[skView presentScene:newScene];
这对我来说很好。我的所有场景都没有保留或强大。
答案 5 :(得分:-3)
也许我的变体会有所帮助:
[[self.scene childNodeWithName:@"YourChildNodeName"] removeFromParent];