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