To jest tekst przetłumaczony maszynowo, który może zawierać błędy!
Skąd pochodzą te informacje?
Dużo z tego to tylko powtórzenie oficjalnej dokumentacji Godot. Poniżej znajdziecie kilka przydatnych linków do oficjalnej dokumentacji (której najchętniej polecam zamiast tej na Piggy, ale jeśli wolisz tę, to po prostu z niej korzystaj!)
Przydatne zasoby:
A co z grafiką, czy muszę ją stworzyć samemu?
Nie! Możecie znaleźć wiele darmowych zasobów tutaj:
Inne przydatne linki:
Inne inne inne inne inne inne inne inne inne inne inne inne inne inne inne inne inne inne inne inne inne inne inne inne inne inne inne inne inne inne inne inne
Co to jest Godot?
Godot (wymawiane Guh-doh), to ‘Game Engine’ (Silnik Gry). Mówiąc prościej, jest to program, który pozwala tworzyć gry (lub zwykłe programy, jeśli chcesz). Godot może robić prawie wszystko, co potrafią inne silniki gier, zarówno 2D, jak i 3D.
Przykłady gier stworzonych w Godot: Godot Showcase
Nie tylko gry indie zostały stworzone w Godot, Sonic Colors Ultimate powstał przy użyciu Godot!
Jak pobrać Godot?
Możesz pobrać Godot z:
- Oficjalnej strony: Godot Official Page.
- Lub na Steam: Godot Steam.
Po prostu pobierz i zainstaluj (lub uruchom na Steam).
Ustaw projekt!
Po uruchomieniu Godot pojawia się to okno:
Tutaj pytano o język programowania, GDScript lub C#. GDScript jest bardzo podobny do Pythona.
Różnice między GDScript a Python (bez kolorów):
def hello():
text = "Hello world!"
print(text)
func hello():
var text = "Hello world!"
print(text)
Dla zmiennych w Pythonie wystarczy wpisać tylko nazwę zmiennej. W GDScript musisz najpierw wpisać var. Aby tworzyć funkcje, piszesz func zamiast def.
Sceny i Węzły
Jednym z najważniejszych pojęć w Godot są Sceny i Węzły. Możemy zacząć od węzłów. Węzeł to obiekt w Godot i może on reprezentować wszystko. Może to być coś, co reprezentuje gracza, przeciwnika, przycisk w menu, tekst na ekranie – wszystko. Sceny są zbiorem węzłów.
Tutaj stworzymy bardzo prosty przykład.
Część 1a - Konfiguracja sceny “gracza”
Na górze okna Godot, naciśnij przycisk “2D”, aby zmienić widok na widok 2D.
Po lewej stronie okna widzicie następujący interfejs:
Naciśnij przycisk “Other Node” i wyszukaj “CharacterBody2D”, wybierz go i naciśnij “Create”. Jest to węzeł używany do gracza 2D. Możecie zauważyć, że obok węzła “CharacterBody2D” znajduje się ostrzegawczy trójkąt ⚠️. Dzieje się tak, ponieważ brakuje mu kilku rzeczy, których by chciał.
Jeśli klikniesz prawym przyciskiem myszy na węźle, zobaczysz przycisk “+ Add Child Node…”. Użyj go, aby dodać dwa węzły, Sprite2D i CollisionShape2D. Sprite2D służy do dodawania grafiki do gracza, a drugi służy do sprawdzania kolizji. Możesz również nadać im nazwy, jeśli ułatwi to śledzenie rzeczy. Nadałem swojemu CharacterBody2D nazwę “Player”. Scena powinna teraz wyglądać następująco:
Część 1b - Naprawa ⚠️ CollisionShape2D
Trójkąt ostrzegawczy w tym przypadku oznacza, że CollisionShape2D brakuje faktycznej kolizji. Możesz to naprawić, klikając na węzeł (po lewej stronie), po czym po prawej stronie pojawi się panel. Znajdziesz tam mnóstwo informacji o węźle, które możesz zmienić. Śmiało eksperymentuj z dostępnymi opcjami. Jednak skupimy się na polu „Shape” – ustaw je na przykład na RectangleShape2D. Nie jest to zbyt ważne, ponieważ nie będziemy tutaj używać kolizji.
Część 1c - Dodawanie Sprite, grafiki
Jeśli klikniesz na Sprite2D po lewej stronie, po prawej stronie pojawi się pole z napisem „Texture”. Tutaj możesz wstawić obrazek dla gracza. Wystarczy przeciągnąć obrazek i upuścić go w to pole.
Tak to będzie wyglądać po dodaniu sprite.
Część 2 - Dodawanie inputu, kontroler
Na górze okna znajduje się menu “Scene - Project - Debug - Editor - Help”. Kliknij “Project” a następnie “Project Settings”. Tutaj pojawi się menu z wieloma ustawieniami. Kliknij “Input Map”. Tutaj możecie ustawić przyciski na klawiaturze.
- W polu “Add New Action” wpisz “left” a następnie kliknij “Add”.
- Następnie dodaj “right”, “up” i “down”.
- Te zostaną oznaczone jako “Actions”
- Do każdej “Action” możecie dodać przyciski, klikając przycisk + po prawej stronie.
- Tutaj wystarczy kliknąć na klawiaturze, a następnie kliknąć Add.
- Dodaj przyciski do wszystkich actions.
Rozdział 3 - Dodawanie skryptu do sterowania graczem.
Aby móc dodać logikę gry, czyli robić coś z graczem, tłem lub czymkolwiek innym w grze, potrzebujemy skryptu. Skrypty to kod i można je pisać w dwóch językach: GDScript lub C#. GDScript jest domyślny.
- Kliknij na węzeł “CharacterBody2D” (nazywam go “Player”).
- Kliknij przycisk “Attach Script” (zobacz poniżej)
- Pojawi się okno, w którym możesz wybrać język (wybierz GDScript) i ścieżkę (po prostu pozwól, aby nazywała się tak, jak jest, ale możesz jej nadać nazwę), a następnie kliknij dalej. Pojawi się okno “Script”. Na początku nie ma tu wiele.
extends CharacterBody2D
# Dette er en enkel karakterkontroller
# This is a simple character controller
# To jest prosty kontroler postaci
Obecnie ten kod mówi tylko tyle, że kod ma należeć do węzła typu “CharacterBody2D”, który jest naszym graczem.
Dodamy tutaj funkcję, której będziemy używać do manipulowania graczem:
extends CharacterBody2D
func _physics_process(delta: float) -> void:
return
Physics Process?
_physics_process to funkcja, która jest aktualizowana w każdej klatce, czyli około 60 razy na sekundę (domyślnie). Istnieje inna funkcja, która nazywa się po prostu _process i jest aktualizowana w sposób ciągły. Jeśli chcesz, aby gracz poruszał się w jednostajnym tempie, użyj _physics_process.
To jest tutaj, gdzie dodamy kod, który przesuwa gracza.
Część 4 - Podstawowe wejście
W części 2 dodałeś przyciski wejściowe, teraz będziemy ich używać. Istnieje wbudowany obiekt o nazwie Input, który możemy wykorzystać do sprawdzenia, czy gracz nacisnął przycisk, który skonfigurowaliśmy w “Input Map”.
Spróbuj wstawić ten kod do _physics_process:
if Input.is_action_pressed('right'):
# Hvis høyre tasten trykkes, sett x-hastigheten til 100
# Jeśli wciśnięto prawy przycisk, ustaw prędkość x na 100
velocity.x = 100
move_and_slide()
Co to jest move_and_slide()?
move_and_slide() to wbudowana funkcja w Godot, która jest używana, gdy chcemy faktycznie przesunąć to, do czego ją zastosujemy. Bez niej gracz się nie ruszy.
Warning
Spacje na liniach są bardzo ważne, jest to podobne jak w Pythonie.
Co się dzieje, gdy uruchomisz program przyciskiem play w oknie Godot, a następnie naciśniesz “right”?
Jeśli nic się nie dzieje:
- Czy pamiętałeś o skonfigurowaniu czegoś w “Input Map”?
- Czy napisałeś
right, a nieRight? To znaczy, czy to, co napisałeś w kodzie, jest identyczne z nazwą w input map?
Cały kod do tej pory
extends CharacterBody2D
func _physics_process(delta: float) -> void:
if Input.is_action_pressed('right'):
velocity.x = 100
move_and_slide()
Spróbuj teraz dodać kod dla 'left', 'up', 'down'.
Co musi być wartością velocity.x dla left? A co z up i down?
Cały kod teraz
extends CharacterBody2D
func _physics_process(delta: float) -> void:
if Input.is_action_pressed('right'):
velocity.x = 100
if Input.is_action_pressed('left'):
velocity.x = -100
if Input.is_action_pressed('down'):
velocity.y = 100
if Input.is_action_pressed('up'):
velocity.y = -100
move_and_slide()
Część 5 - Naprawa kodu
Możecie zauważyć, że gracz nie zatrzymuje się, gdy puszczacie kierunek. Możemy to teraz naprawić!
Przed wszystkimi if-ami, dodaj linijkę, która ustawia prędkość na 0. Można to zrobić, pisząc velocity = Vector2()
Wszystkie prędkości i kierunki w Godot są wektorami, to jest koncepcja matematyczna, na której nie będziemy się teraz skupiać, ale jeśli chcecie dowiedzieć się więcej na temat tego, co to znaczy, możecie zajrzeć tutaj: Wikipedia vectors.
Hele koden teraz
extends CharacterBody2D
func _physics_process(delta: float) -> void:
velocity = Vector2()
if Input.is_action_pressed('right'):
velocity.x = 100
if Input.is_action_pressed('left'):
velocity.x = -100
if Input.is_action_pressed('down'):
velocity.y = 100
if Input.is_action_pressed('up'):
velocity.y = -100
move_and_slide()
Kiedy rozpoczniesz grę, możesz teraz przesuwać gracza:
Dalej możesz poprawić kod, aby prędkość nie była tylko liczbą, ale mogła być przechowywana w innym miejscu.
Możesz na przykład (przed funkcją) dodać stałą, która śledzi prędkość.
Cały kod na końcu z const
extends CharacterBody2D
const SPEED = 100
func _physics_process(delta: float) -> void:
velocity = Vector2()
if Input.is_action_pressed('right'):
velocity.x = SPEED
if Input.is_action_pressed('left'):
velocity.x = -SPEED
if Input.is_action_pressed('down'):
velocity.y = SPEED
if Input.is_action_pressed('up'):
velocity.y = -SPEED
move_and_slide()
Część 6 - Zabawa samemu!
Jeśli wrócicie do pierwszej części, Przydatne Zasoby, możecie znaleźć, czym możecie dalej się bawić.
Następnie możecie spróbować stworzyć własną grę. Co stworzycie, zależy od Was! Jeśli chcecie stworzyć coś zupełnie nowego, róbcie to! Jeśli chcecie spróbować naśladować grę, która już istnieje, róbcie to! Najlepszym sposobem na naukę jest próbowanie!




