Funkcja _init()

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()

  1. Automatyczne wywołanie: Działa automatycznie przy tworzeniu instancji.
  2. Inicjalizacja zmiennych: Umożliwia wstępne ustawienie wartości zmiennych.
  3. Opcjonalne argumenty: Można przekazać parametry, które będą inicjowały zmienne wewnętrzne klasy.
  4. 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:

  1. 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().
  2. 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")
  1. 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.


Komentarze

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *