W Godot, funkcja _init()
jest wykorzystywana do inicjalizacji obiektu po jego utworzeniu, pełniąc rolę konstruktora, który działa automatycznie w momencie tworzenia instancji skryptu. Działa ona podobnie do konstruktorów w innych językach programowania jak Python czy C++.
Działanie funkcji _init()
- Wywoływana automatycznie przy tworzeniu instancji obiektu.
- Pozwala na przypisanie wartości zmiennym lub wykonanie innych operacji inicjalizacyjnych przed uruchomieniem funkcji
_ready()
. - Może przyjmować argumenty, które mogą być przekazane podczas tworzenia instancji obiektu. Umożliwia to dynamiczne ustawianie wartości na etapie konstrukcji obiektu.
Cechy funkcji _init()
- Automatyczne wywołanie: Działa automatycznie przy tworzeniu instancji.
- Inicjalizacja zmiennych: Umożliwia wstępne ustawienie wartości zmiennych.
- Opcjonalne argumenty: Można przekazać parametry, które będą inicjowały zmienne wewnętrzne klasy.
- Domyślne wartości parametrów: Funkcja może przyjmować domyślne wartości dla parametrów.
Przykład użycia funkcji _init()
w Godot:
extends Node
var health: int
var name: String
# Konstruktor
func _init(new_health: int = 100, player_name: String = "Player"):
health = new_health
name = player_name
print("Gracz: ", name, " zaczyna z życiem: ", health)
# Gdy skrypt jest gotowy
func _ready():
print("Gracz jest gotowy do gry z życiem: ", health)
Scenariusze użycia:
- Inicjalizacja wartości w momencie utworzenia obiektu:
Możesz dynamicznie inicjalizować zmienne obiektu, np. ustawiając wartość życia lub nazwę gracza, co eliminuje potrzebę ręcznego przypisywania tych wartości w funkcji_ready()
. - Przekazywanie parametrów przy instancjonowaniu:
Możesz wywołać_init()
z różnymi parametrami, co pozwala na tworzenie instancji obiektu o różnych cechach. Na przykład:
var new_player = Player.new(150, "Warrior")
- Inicjalizacja zasobów lub elementów gry:
W grach może być potrzebna dynamiczna inicjalizacja zasobów, takich jak bronie, wrogowie lub inne elementy, które zależą od parametrów przekazanych podczas tworzenia obiektu. Dzięki _init() możesz przypisywać te zasoby w momencie tworzenia obiektu.
Różnica między _init()
a _ready()
_init()
jest wywoływana natychmiast po utworzeniu instancji obiektu, zanim obiekt zostanie w pełni dołączony do sceny._ready()
jest wywoływana po dołączeniu instancji obiektu do sceny i po tym, jak wszystkie inne dzieci (jeśli są) zostały zainicjowane.
Przykładowe zastosowania
- W przypadku dynamicznie tworzonych obiektów, takich jak pociski, wrogowie czy inne elementy gry, które potrzebują specjalnej konfiguracji w momencie ich utworzenia, możesz wykorzystać _init() do przypisania odpowiednich parametrów.
extends Node3D
var speed: float
var direction: Vector3
func _init(init_speed: float, init_direction: Vector3):
speed = init_speed
direction = init_direction
func _process(delta):
translate(direction * speed * delta)
W powyższym przykładzie obiekt będzie poruszał się z określoną prędkością i kierunkiem, które zostały przekazane w momencie utworzenia instancji.
Dodaj komentarz