Przenoszenie prostej gry z silnika Godot 2 do Godot 3

Godot to darmowy silnik do tworzenia gier, wyróżniający się w pełni funkcjonalnym edytorem na wszystkich desktopowych systemach operacyjnych. Wersja 2 była bardzo wygodnym środowiskiem do tworzenia gier 2D. W przypadku 3D nie było już tak kolorowo, silnik był mocno ograniczony i w sumie nie nadawał się do użytku. Wersja 3 wprowadziła wiele usprawnień w tym praktycznie nowy silnik renderujący. Teraz 3D wygląda naprawdę pięknie.

Choć ogólne zasady pracy w Godocie są takie same to potężna liczba zmian pod maską wymaga dostosowania starych skryptów aby działały w nowej wersji.

Plik projektu engine.cfg -> project.godot

Na początku chciałem po prostu zaimportować stary projekt. Niestety nie było to możliwe. Nowy Godot prosił mnie o wskazanie pliku project.godot, a w wersji 2 plik ustawień nazywał się engine.cfg. Szybkie porównanie zawartości wskazywały na wiele podobieństw formatu ale ostatecznie zdecydowałem się na stworzenie projektu od nowa w Godocie 3. W ten sposób chciałem uniknąć ewentualnych błędów konwersji.

Pozycja węzłów

W G2 aby pobrać lub ustawić pozycję należało użyć funkcji get_pos()/set_pos() zwykle wiązało się to z tworzeniem dodatkowych zmiennych np. pos. G3 rozwiązuje ten problem i teraz pozycja jest ustawiana za pomocą właściwości position.

G2:

pos = get_pos()
pos.x += 10
set_pos(pos)

G3:

position.x +=10

Obsługa fizyki _fixed_process() -> _physics_process()

Poza zmianą nazwy, teraz nie trzeba już wywoływać set_fixed_process() jeżeli metoda _physics_process istnieje jest aktywna. Podobnie jest z inymi funkcjami zwrotnymi jak np. _input, _process.

KinematicBody2D move() -> move_and_slide()

Funkcja move() nie jest już dostępna, a zastąpiła ją move_and_slide(). Dodatkowo mamy funkcję move_and_collide(), która w przypadku kolizji zatrzymuje ruch ciała.

Zliczanie klatek na sekundę OS -> Engine

Funkcje związane z silnikiem, a nie systemem operacyjnym zostały przeniesione do osobnej klasy.

G2:

OS.get_frames_per_second()

G3:

Engine.get_frames_per_second()

Typy zdarzeń

Zdarzenia nie mają już pola type, jeżeli chcemy sprawdzić ich typ korzystamy z operatora is np.:

G2:

if event.type == InputEvent.SCREEN_TOUCH:

G3:

if event is InputEventScreenTouch:

Uproszczone pobieranie węzłów

W G2 jak chcieliśmy pobrać węzeł podrzędny należało użyć funkcji get_node() w Godocie 3 wystarczy użyć $. Oczywiście funkcja get_node() jest nadal dostępna.

G2:

get_node("nazwa_wezla")

G3:

$nazwa_wezla