上手くいった事と課題
上に進み一番上にいる敵を倒す単純なゲームを作成しました。
上手くいった
match文でモーションの制御
要改善
- △変数でカウントする敵弾の発射制御
match文を使う
match文は他言語のswitch文と呼ばれるものになるらしい。
enum(列挙型)で状態になる名前と、その名前を格納する別の変数を作成しておく。
このenumとmatch文を合わせてprocess関数内で使用すると特定の行動を選択させる事が出来る。
あとmove_towardが指定の場所へ移動させるのに超便利だった。
下はmatchを使い中央スタート、四隅を移動をループするように設定しました。
新しい事を1つずつ試していく今の段階も初心者なりに楽しい。 match文で敵を制御すると動きがまとめやすかった。#GodotEngine pic.twitter.com/Yuf5kryKgU
— おめがぬーぶ (@omega_noob_og3) 2022年7月30日
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を使ったカウントは安定して動作していたので次は全てこれで試してみたい。
作って動作確認をして初めて分かる事もあり今回も勉強になりました。
今はプログラムを組み超ミニマムなゲームを回数作って作業に慣れていきたいです。