ブロックを壊す
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回の反転が相殺されます。
チャレンジ
中級ボールでブロックを壊しましょう。
_on_body_enteredで、グループbricksに属するボディに対するelifを追加します。body.smash()を呼び出します。- ボールがブロックの中央より下にあれば下向きに、上にあれば上向きに跳ね返します。
「プレイ」を押すと、ブロックが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プレイグラウンド