ブロック崩しの残機
CoddyのGodotジャーニー「プロジェクト」セクションの一部。レッスン 8/33。
パドルがボールを受け損ねると、ボールは画面下に落ちます。プレイヤーに3つのライフを与えましょう。
ball.gdでは、ボールがy = 380より下に行ったら、受け損ねたことになります。missedシグナルを発行し、パドルの上にボールを再びサーブします。
if position.y > 380:
missed.emit()
position = Vector2(320, 290)
velocity = Vector2(110, -280)main.gdでは、ライフを減らしていきます。0になったら「ゲームオーバー」を表示し、get_tree().paused = trueで一時停止します。パドルとボールは一時停止可能なので、動きが止まります。Mainは常時実行なので、実行を続け、Enterキーを読み取ることができます。
func _process(delta):
if get_tree().paused and Input.is_action_just_pressed("action"):
get_tree().paused = false
get_tree().reload_current_scene()シーンを再読み込みする前に、一時停止を解除してください。一時停止状態はシーンではなくツリーに属するため、シーンを再読み込みすると一時停止した状態で始まってしまいます。
チャレンジ
難しいball.gdでsignal missedを追加します。position.yが380を超えたらシグナルを発行し、ボールを速度(110, -280)で(320, 290)に戻します。main.gdでvar lives = 3から開始し、$HUD/LivesにLives: 3を表示します。ミスするたびにライフを1つ減らし、ラベルを更新します。- ライフが0になったら、
$HUD/MessageにGame Overを表示して、ゲームを一時停止します。 - 一時停止中にEnter(
actionキー)を押すと、一時停止を解除してシーンを再読み込みします。
自分で試してみよう
extends Node2D
const BRICK = preload("res://brick.tscn")
const COLORS = [Color(1, 0.42, 0.42), Color(1, 0.78, 0.34), Color(0.49, 0.95, 0.75), Color(0.369, 0.635, 1), Color(0.75, 0.82, 0.95)]
var score = 0
func _ready():
for row in 5:
for column in 8:
var brick = BRICK.instantiate()
brick.position = Vector2(68 + column * 72, 60 + row * 26)
brick.color = COLORS[row]
add_child(brick)
$Ball.brick_broken.connect(_on_brick_broken)
$HUD/Score.text = "Score: 0"
func _on_brick_broken():
score += 10
$HUD/Score.text = "Score: %d" % score
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
プロジェクトのすべてのレッスン
自分で練習してみよう: Godotプレイグラウンド