ぬーぶのメモ帳

フリーゲームエンジン「Godot」でプログラム経験のない素人の備忘録 最近は色々な動作を考えて試すのが好き。

【Godot】練習に簡易アクションゲームを作った


上手くいった事と課題 


上に進み一番上にいる敵を倒す単純なゲームを作成しました。

上手くいった
match文でモーションの制御

要改善

  • △変数でカウントする敵弾の発射制御
match文を使う

matchは他言語のswitch文と呼ばれるものになるらしい。
enum(列挙型)で状態になる名前と、その名前を格納する別の変数を作成しておく。

このenumとmatch文を合わせてprocess関数内で使用すると特定の行動を選択させる事が出来る。
あとmove_towardが指定の場所へ移動させるのに超便利だった。

下はmatchを使い中央スタート、四隅を移動をループするように設定しました。


match文についてはこちらのyoutubeの動画でくわしく説明してくれています。
www.youtube.com

改善すべき点

下のコードを使用して敵に固有のカウントを持たせた。
カウントをループ処理で増やしていき、条件を満たすと発射関数を実行する。

#カウント変数
var count := 0

#カウント変数と敵弾の発射メソッド
func _process(_delta: float) -> void:
	count += 1
#カウントが等しくなると弾を発射する
	if count == 300:
		texture = texture2
		shot()
	elif count == 310:
		shot()
	elif count == 320:
		shot()
		texture = texture1
		count = 0

ただこの方法でitch.io等の外部サイトで動作確認をすると発射間隔がずれる事があり、STGを作った際も同じようにカウントが進んでいないことがあった。
多分_processの速度低下など起きた時の処理の問題だと思われる。
そのため_physics_processを使ったカウントは安定して動作していたので次は全てこれで試してみたい。

作って動作確認をして初めて分かる事もあり今回も勉強になりました。
今はプログラムを組み超ミニマムなゲームを回数作って作業に慣れていきたいです。