web-dev-qa-db-ja.com

SKSceneを却下する方法は?

私がSKSceneを使い終わったとき、SKSceneクラス内からSKSceneを却下する方法はありますか?

SKSceneを提示するViewcontrollerに戻らない場合は、[skView presentScene:theScene];シーンを再開したり、SKViewから削除したりする方法はありますか?

SKSceneクラスリファレンス および SKViewクラスリファレンス は役に立ちません。

更新:

次のコードは、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];
}
15
4GetFullOf

「シーンから「ViewControllerに戻る」に移動することはできません。シーンはViewであり、ViewControllerはビューを制御および表示します。ViewControllerを使用してビューを変更します。ViewController自体はビューではないことに注意してください。」 -ワービオ

ここでの最善の解決策は、別のViewControllerを作成することです。このビューコントローラーが私のメニューになります。次に、他のビューコントローラがsksceneのホストとして機能します。

私の状況では、メニューのビューコントローラーを使用して、skviewに表示されているビューコントローラーを閉じます。

4
4GetFullOf

同様の問題に遭遇したので、私はあなたの質問に出くわしました、そして誰もまともな答えを与えなかったので、これが私がそれを解決した方法です:

  1. 私のシーンでは、両方の行を呼び出しました
[self removeFromParent];
[self.view presentScene:nil];
  1. 私のコントローラー(SKSceneを表示するコントローラー)ビューがビューの場合にのみ、viewWillAppearでシーンを作成して表示するために、viewDidLoadからシーンを作成して表示していたAppleのテンプレートコードを変更しましたシーンはゼロです

これが私のSwiftコードです。ObjectiveCを使用している場合でも、その機能を理解できます。重要なのは「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)
    }
}
12
Alex

次を使用できます。

 [yourSKView presentScene:nil];

シーンを削除します。

11
AndyOS

SKScene内から、[self.view presentScene:aNewScene]を実行するだけで別のシーンを表示できます

2
Yaman

ビューコントローラでこのブロックを使用してシーンを完全に削除します。明らかに、サイズと「newSKview」を宣言する必要があります。

SKView * skView = (SKView *)self.view;

SKScene *newScene = [[newSKView alloc]initWithSize:size];
newScene.scaleMode = SKSceneScaleModeAspectFill;
SKScene *oldScene=(skView.scene);
[oldScene removeFromParent];
[skView presentScene:newScene];

これは私にとってはうまくいきます。私のシーンはどれも保持されておらず、強いものもありません。

2
Wharbio