ichou1のブログ

主に音声認識、時々、データ分析のことを書く

Godotメモ(その3)

前回の続き。

scoreやmessageを表示する「HUD」sceneを追加する(意味は"heads-up display"とのこと)
「CanvasLayer」ノードを作成して、LabelやButtonを子として追加する。

[node name="HUD" type="CanvasLayer"]

「Start」ボタンが押されると、「pressed()」シグナルが発行される(継承元である「BaseButton」ノードで定義)
f:id:ichou1:20191109113340p:plain

これを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()