とりとめも

藻類が学んだり感じたりしたことを未来の自分のために書き留めるところ

【Godotお勉強メモ】経過時間を表示するタイマーを作成する

はじめに

ほぼチュートリアルのおさらいですが、作業メモです。
経過時間を表示するタイマーを画面に表示させます。

Godot バージョン:4.1.3

前回のあらすじ

marimomemo.hatenablog.jp

マウスホイールにあわせて状態を遷移させる処理を作りました。

今回やること

こんな感じで時間を表示します

作業

下準備(シーン・ノードの作成)

今回の作業ではシーンツリーを以下のような構成にします。
新規に作成するのは、空のControlノードで作るHUDシーンと、Labelノードで作るElapsedTimeLabelです。

ElapsedTimeLabelシーンを作成

HUDシーンにElapsedTimeLabelシーンを追加

MainシーンにHUDシーンを追加

チュートリアルのときと違って、HUDシーンには直接処理を記述しないことにします。
準備ができたら、もうMainシーンとHUDシーンは触りません。

スクリプトを書く

ElapsedTimeLabelシーンにスクリプトをアタッチして、書いていきます。

extends Label

var elapsed_time:int = 0

func _ready():
    text = "00:00:00"
    anchor_top = 0
    anchor_left = 0
    offset_top = 0
    offset_left = 0
    scale = Vector2(1.5,1.5)

    # Timerインスタンスをシーンツリーに追加
    var timer = Timer.new()
    timer.wait_time = 1.0
    timer.autostart = true
    timer.one_shot = false
    add_child(timer)
    
    # timeoutシグナルを接続
    timer.connect("timeout", Callable(self, "_on_timer_timeout"))
    
func _on_timer_timeout():
    elapsed_time += 1 
    var hours = elapsed_time / 3600
    var minutes = (elapsed_time % 3600) / 60
    var seconds = elapsed_time % 60
    text = "%02d:%02d:%02d" % [hours, minutes, seconds]

今回やることは以上です。
これで画面左上に時間が表示されるようになりました。

TimerノードはGUIで設定せず、スクリプト内で作成するようにしました。
また、今回のようにElapsedTimeLabel専用のスクリプト内で定義すれば、ネーミングが一般的な名詞でも問題ない考えです。

おしまい

今回はあっという間に終わりました。
本題は次回なので、今回は導入回だったりします。