Menu
CoddyTech

ブロックを壊す

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

ボールはレンガを通り抜けます。レンガもボディで、それぞれ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

チャレンジ

中級

ボールでブロックを壊しましょう。

  1. _on_body_enteredで、グループbricksに属するボディに対するelifを追加します。
  2. body.smash()を呼び出します。
  3. ボールがブロックの中央より下にあれば下向きに、上にあれば上向きに跳ね返します。

「プレイ」を押すと、ブロックが1つずつ弾けます。その後、「確認」を押します。

自分で試してみよう

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)

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

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