Как отказаться от 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];
  1. в моем контроллере (контроллер, который отображает 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];