Godot4 ビッグカツブロック崩し23 リトライボタンと面の再読込みの実装例

※この連載の全ての記事は、タグ「ビッグカツ」の検索一覧から探すことができます。
※この連載で作ったゲームは「BigBreakOut(ゲームの作り方の記事付き) | フリーゲーム投稿サイト GodotPlayer」でプレイできます。

昔から人気の駄菓子「ビッグカツ」フリー素材画像が公開されたので、無料・軽快な 2D / 3D 用のゲームエンジン Godot Engine 4 を使って、ビッグカツ画像を使ったブロック崩しを作成します。

「ビッグカツブロック崩し」作成の第23回では、ゲームオーバー時に表示される、リトライボタンが押されたときにシグナルを用いて関数を呼び出す設定と、その面(レベル)をリセットしてやり直すリトライ処理の実装例、それらのテスト結果について紹介します。

※ GodotEngine 4.3 を使用しています。.NET 版ではありません。
※スクリプトは自己責任でご使用ください。

前回の記事

前回は、ゲームオーバーとゲームクリア時に表示する UI 群を作成して、外観や表示順の設定などを行いました。

ボタンが押された際の関数呼び出しの設定

ゲームオーバー時に表示される GameOverUI ノード( Control クラス)の子ノードに作成した ボタン、RetryButton ノードButton クラス)が押された際に呼び出す関数作成します。

リトライボタンの UI の配置の詳細は以下の記事を参照してください。

Godot4 ビッグカツブロック崩し ゲームオーバー画面に表示するリトライボタンの作成4

シーンドックで RetryButton ノード選択した後、ノードドックで button_up() シグナルダブルクリックします。

Godot4 ビッグカツブロック崩し ゲームオーバー画面に表示するリトライボタンが押された際のシグナルと受信側メソッドの設定1

「メソッドにシグナルを接続」ダイアログで、スクリプトをすでに割り当ててある Stage ルートノードを選択して「接続」ボタンを押すと、下側の「受信側メソッド」に指定された名前の関数が追加され RetryButton のボタンが離されたタイミングで発せられるシグナル接続します。

Godot4 ビッグカツブロック崩し ゲームオーバー画面に表示するリトライボタンが押された際のシグナルと受信側メソッドの設定2

Script ワークスペースに切り替わり、 stage.gd が開かれ、追加された受信側メソッドの関数表示されます。
ノードドックでは、RetryButton ノードの button_up() シグナルの下位に、追加された関数名表示されます。

Godot4 ビッグカツブロック崩し ゲームオーバー画面に表示するリトライボタンが押された際のシグナルと受信側メソッドの設定3

Giveup ボタンにも同様に _on_giveup_button_button_up 関数を stage.gd に追加して button_up() シグナルと接続します。

ギブアップとリトライ処理のスクリプト例

stage.gd に追加した RetryButton と GiveupButton の button_up() シグナルの受信側メソッドの関数にそれぞれ以下の処理を上書きします。
※詳しくはスクリプト内のコメントを参照してください。

## RetryButton が離されたタイミングで呼び出される受信側メソッドです。
## 同じレベルを再び読み込み、リトライを行います。
func _on_retry_button_button_up():
	# 現在のレベルを読み込みなおします。
	current_level_index -= 1
	next_level()
	return

## GiveupButton が離されたタイミングで呼び出される受信側メソッドです。
## タイトルシーンに戻ります。
func _on_giveup_button_button_up():
	# タイトルシーンに戻ります。
	get_tree().change_scene_to_file("res://title_scene.tscn")
	return

リトライの処理では、次の面(レベル)を読み込む next_level 関数を、現在の面(レベル)のインデックスを1つ減らし(戻し)てから呼び出すことで、同じ面(レベル)を再び読み込ませて、リトライを実装しました。

next_level 関数については、以下の記事を参照してください。

 https://compota-soft.work/wp1/wp-admin/post.php?post=42225&action=edit

タイトルのシーンに切り替える実装では SceneTree クラスの change_scene_to_file 関数にタイトルのシーンのファイルを渡して呼び出しています。

Changes the running scene to the one at the given path, after loading it into a PackedScene and creating a new instance.

Returns @GlobalScope.OK on success, @GlobalScope.ERR_CANT_OPEN if the path cannot be loaded into a PackedScene, or @GlobalScope.ERR_CANT_CREATE if that scene cannot be instantiated.

Note: See change_scene_to_packed for details on the order of operations.

PackedScene にロードして新しいインスタンスを作成した後、実行中のシーンを指定されたパスにあるシーンに変更します。

成功した場合は @GlobalScope.OK を返し、パスを PackedScene にロードできない場合は @GlobalScope.ERR_CANT_OPEN を返し、そのシーンをインスタンス化できない場合は @GlobalScope.ERR_CANT_CREATE を返します。

注: 操作の順序の詳細については、「change_scene_to_packed」を参照してください。
SceneTree — Godot Engine (4.x)の日本語のドキュメント #change-scene-to-file と Google 翻訳

シーンの切り替え方には、他にもいくつかの方法があり、それぞれに長所と短所があります。
詳細は、公式サイト「シーンを手動で変更する — Godot Engine (4.x)の日本語のドキュメント」を参照してください。

テスト

F6 キーで開いているステージのシーンを実行します。

ボールが画面外に落下したタイミングで、ゲームオーバーの UI 表示され、リトライボタンを押すとリトライカウントが1増え、同じレベルを再びプレイできした。
ギブアップボタンを押すとタイトルに戻りました。

Godot4 ビッグカツブロック崩し ゲームオーバー画面のリトライとギブアップボタンの機能の確認の動画の静止画説明

まとめ

「ビッグカツブロック崩し」作成の第23回では、ゲームオーバー時に表示される、リトライボタンが押されたときにシグナルを用いて関数を呼び出す設定と、その面(レベル)をリセットしてやり直すリトライ処理の実装例、それらのテスト結果について紹介しました。

参照サイト Thank You!

記事一覧 → Compota-Soft-Press

コメント

Ads Blocker Image Powered by Code Help Pro

お願い - Ads Blocker Detected

このサイトは広告を掲載して運営しています。

ポップアップを閉じて閲覧できますが、よろしければ

このサイト内の広告を非表示にする拡張機能をオフにしていただけませんか?

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

We have detected that you are using extensions to block ads. Please support us by disabling these ads blocker.

タイトルとURLをコピーしました