Разбиваем блоки
Часть раздела Проекты путешествия по Godot на Coddy. Урок 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. Если мяч касается двух кирпичей одновременно, две смены знака взаимно компенсируются.
Задание
СреднеПусть мяч разбивает кирпичи.
- В
_on_body_enteredдобавьelifдля тел в группеbricks. - Вызови
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