Godot 音シュー09「キー入力で得点。」
本日2度目の更新。腰イテー。 で、そろそろ「音ゲー」っぽくはなりそうな予感がしてきたぞ。いいタイミングでキーが押せたら得点するようにしよう。キー入力も得点管理もすでに学習済みなので、そんなに難しくはあるまい。
得点管理
得点管理はもちろん、グローバル変数で行うじゃろー。
前やった様に(玉転がしの13 参照)、スクリプトパネルの [File] > [New] から適当な名前のファイルを作成し、メニューの [Project] > [Project Settings] > [AutoLoad] で設定する。ファイル名は出来るだけ短いのがいいな。グローバル変数の利点はそこだからな。
ファイルネーム:G.gd
コード:
extends Node var myScore = 0
設定完了。
これで、どっからでも "G.myScore += 10" とかで得点を加算できる。シーンが変わっても得点は維持される。。。 あれ? 今回はシーン(曲)が変わったら得点を破棄しないといけないのかな? 前の曲の点か残ってたらおかしいもんね。もしかしたら、もしかするね。ま、あとでやろう。
キー入力
キー入力はもちろんメニューの [Project] > [Project Settings] > [Input Map] で設定する。
得点表示用ラベル
コードを書く前に、得点表示用の「Label」ノードを追加しておこう。
- カウントダウン用のラベルをリネームした。スクリプト中でも使っているので、リネームしておく事を忘れずに。(コレ自動でやってくんねーかなー)
- ただ、"Score:"って書いただけ。
- ここが得点表示の場所。Alignは右寄せにしといた方がいいかな。
スクリプト
先ずは、左エリア用のすくりぷとダケで説明。他のエリアは同じようにやればいい。
L4~5
- 修正する時やや楽をするため、カラーを変数に持たせただけ。
L7
- 得点表示用のラベルを操作するからね。変数用意。
L13
- いつもみたいに
get_node()
するんだけど、親ノード方向にさかのぼっていく時には自動で候補ノードを出してくれない。(出せよー。) で、指定を間違えないように注意。
L15~19
- キー入力のチェック + 色のチェック + 得点加算 + 得点表示。
- キューブがエリアに入ってる時はアルベドカラーが赤なので、それを利用すればイイよね。
str()
はカッコ内の変数をストリング(string)型に変換する内蔵関数。変数"myScore"は整数(int)型、ラベルのTextに入れられるのはストリング型のもの。だからコレで変換する必要がある。
L24 / L29
- 色を変数から入れるようにしただけ。
これでどお?
テスト
エラーもなく、得点もちゃんと入るな。よし! だが、なんでもかんでも10点だな。Good、Great、Cool!!、で得点を変えないといけないか。それとMissでは減点な。
あとあれだな、今回は左側のエリアだけだけど、ほんとは、上下左右見てないといけないから、コレ、相当難しいな。覚えゲーになるか? そーするとチトつまらんな。
ま、もうちょい先に進めてから考えるか。
いる? 左エリア用。
extends MeshInstance var spaMat #自身が持つSpaialMaterialの情報操作用 var colorIn = Color("#ff0000") var colorOut = Color("#ffffff") var nLabel #得点表示用Label_score2の操作用 func _ready(): #メッシュとマテリアルが入ってないとエラーになるから注意 spaMat = get_surface_material(0) #0番目に入ってるヤツの情報ゲット nLabel = get_node("../../../Label_score2") #得点表示用Label_score2ゲット func _process(delta): if Input.is_action_just_pressed("myA"): if spaMat.albedo_color == colorIn: G.myScore = G.myScore + 10 nLabel.text = str(G.myScore) #キューブ入ったよ(signal from 「Area_l」) func _on_Area_l_body_entered(body): #色変えるぜ spaMat.albedo_color = colorIn #キューブ出たよ(signal from 「Area_l」) func _on_Area_l_body_exited(body): #色戻すぜ spaMat.albedo_color = colorOut