Как отказаться от SKScene?
Когда я закончил свой SKScene, есть способ отклонить SKScene из моего класса SKScene?
Если я не вернусь в свой Viewcontroller, где я представляю свой SKScene [skView presentScene:theScene];
, есть ли способ перезапустить сцену или удалить ее из моего SKView?
Ссылка на класс SKScene и Ссылка на класс SKView не помогают.
Update:
Следующий код удаляет мою сцену из моего SKView [yourSKView presentScene:nil];
, но когда Im обратно в мой контроллер просмотра, сцена все еще работает в фоновом режиме. Я всегда могу приостановить его, когда игра закончена, и я вернулся к контроллеру (меню), но мне интересно, есть ли другой метод, который затем приостанавливает его, как полностью удаляя его?
-(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];
}
Ответы
Ответ 1
"Вы не можете перейти" Назад к контроллеру представления "из сцены. Сцена представляет собой элемент" Вид ", элемент управления представлением и отображает виды. Используйте контроллер вида для изменения представлений. Помните, что сам контроллер представления не является Посмотреть." -Wharbio
Лучшее решение здесь - создать еще один View Controller. Этот контроллер будет моим меню. Тогда другой viewcontroller будет выступать в качестве узла для skscene.
В моей ситуации я затем использую свой диспетчер просмотра меню, чтобы отключить отображение viewcontroller в skview.
Ответ 2
Вы можете использовать:
[yourSKView presentScene:nil];
чтобы удалить сцену.
Ответ 3
Встретив подобную проблему, я наткнулся на ваш вопрос, и поскольку никто не дал достойного ответа здесь, как я решил это:
- В моей сцене я назвал обе строки
[self removeFromParent];
[self.view presentScene:nil];
- в моем контроллере (контроллер, который отображает SKScene) Я изменил код шаблона от Apple, который создавал и представлял мою сцену из viewDidLoad, чтобы создать и представить мою сцену в viewWillAppear, только если сцена просмотра равна nil
здесь мой код Swift, даже если вы используете Objective C, вы поймете, что он делает; ключевой линией является "if skView.scene == nil" test:
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)
}
}
Ответ 4
Внутри SKScene
вы можете просто сделать [self.view presentScene:aNewScene]
, чтобы представить другую сцену
Ответ 5
Я полностью удаляю сцены, используя этот блок в контроллере просмотра:
Очевидно, вам нужно будет объявить свой размер, а "newSKview"
SKView * skView = (SKView *)self.view;
SKScene *newScene = [[newSKView alloc]initWithSize:size];
newScene.scaleMode = SKSceneScaleModeAspectFill;
SKScene *oldScene=(skView.scene);
[oldScene removeFromParent];
[skView presentScene:newScene];
Это отлично работает для меня. Ни один из моих сцен не сохранен или не силен.
Ответ 6
Возможно, мой вариант будет полезен:
[[self.scene childNodeWithName:@"YourChildNodeName"] removeFromParent];