GameSceneが最初に呼び出されたように、GameSceneをリセットして再起動したいと思っています。私はこれを行うためのさまざまな方法を見てきましたが、すでに親がある親ノードにノードを追加しようとしているという警告が表示されるたびに、しかし、私のコードでは、既存のノードをすべて削除するので、GameSceneをリセットする方法については本当に混乱しています。Swift 3(SpriteKit):ゲームが終了した後にGameSceneをリセットする
let scene = GameScene(size: self.size)
scene.scaleMode = .aspectFill
let animation = SKTransition.fade(withDuration: 1.0)
self.view?.presentScene(scene, transition: animation)
self.removeAllChildren()
self.removeAllActions()
self.scene?.removeFromParent()
1.Edited::私はなぜ気づいこれは私が(私は最初からGameSceneを再起動するときに、このコードが呼び出され、それがGameSceneクラス内で呼び出される)今それを行う方法です私はこの警告を受け取りました: "私はクラスの外のシーンのための変数とグローバル変数としてすべての変数を持っていたので、"私はすでに親を持っている親にノードを追加しようとしています。しかし、ゲームが再開すると、ゲームは左下に表示されます。なぜこれが当てはまり、どうすればこの問題を解決できますか? -
2.EditedをFIXED:すべてが今正常に動作しますが、今の私の懸念は、すべてのノードが削除されていてもdeinit{}
がないと呼ばれ、fpsのは、時間の経過とともに低下しないということです。
import UIKit
import SpriteKit
import GameplayKit
var screenSize = CGSize()
class GameViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
if let view = self.view as! SKView? {
// Load the SKScene from 'GameScene.sks'
if let scene = SKScene(fileNamed: "GameScene") {
// Set the scale mode to scale to fit the window
scene.scaleMode = .aspectFill
screenSize = scene.size
// Present the scene
view.presentScene(scene)
}
view.ignoresSiblingOrder = true
view.showsFPS = true
view.showsNodeCount = true
}
}
はその後、私のGameSceneは基本的に次のとおりです:
import SpriteKit
import GameplayKit
class GameScene: SKScene, SKPhysicsContactDelegate {
//Declare and initialise variables and enumerations here
deinit{print("GameScene deinited")}
override func didMove(to view: SKView) {
//Setup scene and nodes
}
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
//Do other things depending on when and where you touch
//When I want to reset the GameScene
let newScene = GameScene(size: self.size)
newScene.anchorPoint = CGPoint(x: 0.5, y: 0.5)
newScene.scaleMode = self.scaleMode
let animation = SKTransition.fade(withDuration: 1.0)
self.view?.presentScene(newScene, transition: animation)
}
ここで私は(関連があるので、基本的にはすべてのシーンに関連するすべてのインスタンス)のシーンを設定するために、私のGameSceneで私GameViewControllerに持っているものです
どのような答えも大歓迎です:)
「親がすでに存在する親にノードを追加しようとしています」ということについて、あなたはいくつか混乱していると言います:)これは、古いシーンが割り当て解除されず、ノードをグローバルに格納していて、現在のシーンにそれでも、これはちょうど推測です。あなたの古いscceneが適切に割り当て解除され、実際に別の親にノードを追加しようとしているかもしれません。だから、より多くの情報が必要です。あなたはそのエラーが発生したときにシーンにノードを追加していますか? – Whirlwind
ゲームシーンファイルのすべての変数がクラス外に定義されている場合(このエラーが発生しているノードを含む)は問題ありませんか?それが問題だろうか? –
^これはうまくいきましたが、ゲームが画面の左下隅でゲームを再開すると、今すぐですか?これをどうやって解決するのですか? –