Godotメモ(その3)
前回の続き。
scoreやmessageを表示する「HUD」sceneを追加する(意味は"heads-up display"とのこと)
「CanvasLayer」ノードを作成して、LabelやButtonを子として追加する。
[node name="HUD" type="CanvasLayer"]
「Start」ボタンが押されると、「pressed()」シグナルが発行される(継承元である「BaseButton」ノードで定義)
これをGDscript側で拾って、"start_game"シグナルを発行する。
HUD.gd
signal start_game
func _on_StartButton_pressed():
$StartButton.hide()
emit_signal("start_game")
"start_game"シグナルは「Main」sceneに接続される。
connection(接続」)の定義はsignalの"受け手"側に記述する。
Main.tscn
; from : signal発行元 [connection signal="start_game" from="HUD" to="." method="new_game"]
step by stepでは、この"start_game"シグナルをMobインスタンスに対しても接続させている。
「Main」sceneのtreeに「Mob」は出てこないので、下記フォーマットでスクリプトに書く。
<source_node>.connect(<signal_name>, <target_node>, <target_function_name>)
Main.gd
func _on_MobTimer_timeout(): ... var mob = Mob.instance() ... $HUD.connect("start_game", mob, "_on_start_game")
「HUD」sceneが出来たら、「Main」sceneの子ノードとしてインスタンス設定する。
[ext_resource path="res://HUD.tscn" type="PackedScene" id=4] [node name="HUD" parent="." instance=ExtResource( 4 )]
Finishing up(仕上げ)に関するメモ。
「ColorRect」ノードは「Main」sceneの一番目の子として定義する(レイヤの一番下になる)
Make it the first node under Main so that it will be drawn behind the other nodes.
Main.gd
「AudioStreamPlayer 」ノードは2つ同時に再生してもエラーになるわけではない。
func new_game(): ... $Music.play() func game_over(): ... # 1つを止めてから、もう片方を再生 # $Music.stop() # $DeathSound.play() # これでもOK $DeathSound.play() $Music.stop()