Menu
CoddyTech

レンガを壊す

CoddyのGodotジャーニー「プロジェクト」セクションの一部。レッスン 6/33。

ボールがブロックをすり抜けます。ブロックも物体で、それぞれがグループ bricks に属しています。is_in_group はブロックとパドルを見分けます。

各ブロックには smash() 関数があります。ブロックを火花にして取り除きます。

elif body.is_in_group("bricks"):
	body.smash()

次に、ボールはブロックの中央から離れる方向に跳ね返ります。ボールがブロックより下にあれば下へ、上にあれば上へ跳ね返ります。隙間をすり抜けた後、ボールがブロックの上から当たることもあります。

if position.y > body.position.y:
	velocity.y = abs(velocity.y)
else:
	velocity.y = -abs(velocity.y)

velocity.y の向きを反転させないでください。ボールが同時に2つのブロックに触れると、2回の反転が相殺されます。

challenge icon

チャレンジ

中級

_on_body_enteredで、グループbricksに属するボディに対するelifを追加します。

  1. body.smash()を呼び出します。
  2. ボールがブロックの中央より下にある場合は下向きに、上にある場合は上向きに跳ね返します。

自分で試してみよう

extends Area2D

var velocity = Vector2(110, -280)

func _ready():
	body_entered.connect(_on_body_entered)

func _physics_process(delta):
	position += velocity * delta
	if position.x < 8 or position.x > 632:
		velocity.x = -velocity.x
	if position.y < 42:
		velocity.y = -velocity.y

func _on_body_entered(body):
	if body.name == "Paddle":
		velocity.x = (position.x - body.position.x) * 5
		velocity.y = -abs(velocity.y)
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

プロジェクトのすべてのレッスン

自分で練習してみよう: Godotプレイグラウンド