私が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];
}
「シーンから「ViewControllerに戻る」に移動することはできません。シーンはViewであり、ViewControllerはビューを制御および表示します。ViewControllerを使用してビューを変更します。ViewController自体はビューではないことに注意してください。」 -ワービオ
ここでの最善の解決策は、別のViewControllerを作成することです。このビューコントローラーが私のメニューになります。次に、他のビューコントローラがsksceneのホストとして機能します。
私の状況では、メニューのビューコントローラーを使用して、skviewに表示されているビューコントローラーを閉じます。
同様の問題に遭遇したので、私はあなたの質問に出くわしました、そして誰もまともな答えを与えなかったので、これが私がそれを解決した方法です:
[self removeFromParent]; [self.view presentScene:nil];
これが私の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)
}
}
次を使用できます。
[yourSKView presentScene:nil];
シーンを削除します。
SKScene
内から、[self.view presentScene:aNewScene]
を実行するだけで別のシーンを表示できます
ビューコントローラでこのブロックを使用してシーンを完全に削除します。明らかに、サイズと「newSKview」を宣言する必要があります。
SKView * skView = (SKView *)self.view;
SKScene *newScene = [[newSKView alloc]initWithSize:size];
newScene.scaleMode = SKSceneScaleModeAspectFill;
SKScene *oldScene=(skView.scene);
[oldScene removeFromParent];
[skView presentScene:newScene];
これは私にとってはうまくいきます。私のシーンはどれも保持されておらず、強いものもありません。