Menu
CoddyTech

Duże i małe asteroidy

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

Tylko duże skały powinny się rozpadać. Nadaj każdej skale rozmiar size: 2 dla dużej i 1 dla małej, a następnie ustaw jej skalę na tej podstawie w rock.gd's _ready: scale = Vector2.ONE * size * 0.5.

spawn_rock przyjmuje też rozmiar. Ustaw rock.size przed add_child(rock): _ready uruchamia się wewnątrz add_child, więc ustawienie rozmiaru po wywołaniu tej funkcji następuje za późno, by wpłynąć na skalę.

func _on_rock_broken(rock):
	if rock.size == 2:
		spawn_rock.call_deferred(rock.position, rock.velocity.rotated(0.8) * 1.5, 1)
		spawn_rock.call_deferred(rock.position, rock.velocity.rotated(-0.8) * 1.5, 1)

Mała skała po prostu się rozpada.

challenge icon

Wyzwanie

Trudny

Spraw, aby duże skały rozpadały się na mniejsze, a małe pękały.

  1. W pliku rock.gd dodaj var size = 2 i ustaw scale = Vector2.ONE * size * 0.5 w funkcji _ready.
  2. Dodaj parametr size do funkcji spawn_rock i ustaw rock.size przed wywołaniem add_child. Pierwsze 4 skały otrzymują wartość 2.
  3. Rozdzielaj skałę tylko wtedy, gdy rock.size == 2, na dwie o rozmiarze 1.

Naciśnij „Graj” i strzelaj: duże skały rozpadają się na mniejsze, a małe pękają. Następnie naciśnij „Sprawdź”.

Spróbuj swoich sił

extends Node2D

const ROCK = preload("res://rock.tscn")

func _ready():
	for i in 4:
		spawn_rock(Vector2(randf_range(0, 640), 0), Vector2(randf_range(-90, 90), randf_range(40, 90)))

func spawn_rock(where, velocity):
	var rock = ROCK.instantiate()
	rock.position = where
	rock.velocity = velocity
	rock.broken.connect(_on_rock_broken)
	add_child(rock)

func _on_rock_broken(rock):
	spawn_rock.call_deferred(rock.position, rock.velocity.rotated(0.8) * 1.5)
	spawn_rock.call_deferred(rock.position, rock.velocity.rotated(-0.8) * 1.5)

Wszystkie lekcje w sekcji Projekty

Poćwicz samodzielnie: Edytor online Godot