Menu
CoddyTech
flag Ru iconРусскийdown icon

Разбиваем блоки

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

challenge icon

Задание

Средне

В _on_body_entered добавь elif для тел в группе bricks:

  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