Menu
CoddyTech

Rozbijanie cegieł

Część sekcji Projekty ścieżki Godot w Coddy. Lekcja 6 z 36.

Piłka przelatuje przez cegły. Cegły też są obiektami, a każda z nich należy do grupy bricks. is_in_group odróżnia cegłę od paletki.

Każda cegła ma funkcję smash(). Rozbija cegłę na iskry i usuwa ją.

elif body.is_in_group("bricks"):
	body.smash()

Następnie piłka odbija się od środka cegły: w dół, jeśli znajduje się niżej niż cegła, a w górę, jeśli znajduje się wyżej. Piłka może uderzyć cegłę od góry po prześlizgnięciu się przez szczelinę.

if position.y > body.position.y:
	velocity.y = abs(velocity.y)
else:
	velocity.y = -abs(velocity.y)

Nie odwracaj velocity.y. Jeśli piłka dotknie jednocześnie dwóch cegieł, dwa odwrócenia się zniosą.

challenge icon

Wyzwanie

Średni

Niech piłka rozbija cegły.

  1. W funkcji _on_body_entered dodaj elif dla obiektów należących do grupy bricks.
  2. Wywołaj body.smash().
  3. Odbij piłkę w dół, jeśli znajduje się poniżej środka cegły, a w górę, jeśli znajduje się powyżej.

Naciśnij „Graj”: cegły będą rozbijać się pojedynczo. Następnie naciśnij „Sprawdź”.

Spróbuj swoich sił

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)

Wszystkie lekcje w sekcji Projekty

Poćwicz samodzielnie: Edytor online Godot