画面遷移の管理を各シーンで利用しよう
タイトルシーンへの組み込み
まずは「Title」シーンに組み込みます。
_ready
関数を次のように書き換えます。
func _ready() -> void: # シーン開始 SceneManager.effect_enter_scene()
続いて、_on_button_pressed
関数を次のように書き換えます。
func _on_button_pressed() -> void: # シーン変更 SceneManager.load_scene(SceneManager.MAZE)
迷路シーンへの組み込み
続いて「Maze」シーンに組み込みます。
_ready
関数を次のように書き換えます。
func _ready() -> void: #MazeUtil.test_gen_maze() # シーン開始 SceneManager.effect_enter_scene() # 迷路データの作成と表示 var w = 13 var h = 9 var maze_info = MazeUtil.gen_maze(w, h) MazeLayout.layout(self, maze_info)
続いて、_on_goal_enter
関数を次のように書き換えます。
# プレイヤーがゴールした func _on_goal_enter(_area) -> void: # プレイヤーを停止して、クリアシーンを追加 player.is_act = false add_child(clear_scene.instantiate()) # クリア音楽を流したあと、シーンを変更 var audio = $AudioStreamPlayer audio.play() await get_tree().create_timer(audio.stream.get_length() + 1).timeout SceneManager.load_scene(SceneManager.TITLE)
新しい書き方が出てきているので解説します。下の部分です。
await get_tree().create_timer(audio.stream.get_length() + 1).timeout
create_timer
関数は、秒を引数にしてSceneTreeTimer
を作成します。このメソッドは、ワンショット遅延タイマーを作成するためによく使用されます。
最後のtimeout
に対してawait
をおこなうことで、タイマーが終了するまで処理を待ちます。
ここでは、audio.stream.get_length()
で得た音源の長さに1
秒を足して、その時間が終わったあとにシーン遷移をおこなっています。
実行確認
ここまでの処理を実装できたら、実行確認をおこなってください。
タイトル画面で「START」ボタンを押したら迷路画面に遷移します。そして、迷路を解いたら、クリア演出を表示して、ジングルが鳴ったあとタイトル画面に戻ります。