Podstawy GDScript – część 2 – zmienne (Godot tutorial po polsku)
Jednym z fundamentów programowania — niezależnie od języka — są zmienne. To dzięki nim możemy przechowywać dane, manipulować nimi i tworzyć dynamiczne mechaniki w naszych grach. W tym artykule przyjrzymy się bliżej zmiennym w GDScript: czym są, jak je deklarować, jakie typy danych obsługują i jak z nich korzystać w praktyce.
Niezależnie od tego, czy tworzysz prostą platformówkę, czy rozbudowaną grę RPG, zrozumienie zmiennych to klucz do pisania kodu.
Do artykułu nagrałem dodatkowo film, w którym pokazuję opisane tutaj rzeczy:
Czym są zmienne w programie?
Najprościej mówiąc zmienne są takimi pudełkami na dane. W GDScript najprościej utworzyć zmienną za pomocą słowa kluczowego var. Jest to tzw. deklaracja. Deklarujemy, że chcemy utworzyć zmienną o danej nazwie:
var gracz_moze_skakac
var ile_zyc
var cena_broni
var nazwa_planszy
Nazwa zmiennej:
- może składać się wyłącznie z liter, znaku podkreślenia i cyfr
- nie może zaczynać się od cyfry
- wielkość znaków ma znaczenie (a i A to dwie różne zmienne)
- nie może nazywać się tak samo jak słowa kluczowe języka GDScript (np. poznany już func czy var)
O zmiennej bez przypisanej wartości mówimy, że jest niezainicjowana. W przypadku GDScript ma ona wartość null. W programowaniu często używa się tego słowa, żeby pokazać że coś nie istnieje lub jest puste. I to nie jest 0 (zero) – bo zero to przecież już jest liczba.
Zmienną możemy zdefiniować – czyli określić ją bardziej konkretnie przypisując jej wartość w czasie jej deklaracji (lub w dowolnym momencie dalej w kodzie):
var gracz_moze_skakac = true
var ile_zyc = 9
var cena_broni = 13.37
var nazwa_planszy = "Slipgate Complex"
No dobrze, a co gdyby przez przypadek w ile_zyc zamiast liczby żyć wpisać tekst. Spróbuj uruchomić taki kod:
extends Node
var ile_zyc = 5
func _ready()->void:
ile_zyc = "kot"
ile_zyc = ile_zyc - 1
Próba zakończy się błędem:
Invalid operands 'String' and 'int' in operator '-'.

Błąd mówi nam, że operator ’-’ obsługuje odejmowania od siebie zmiennej typu String i typu int.
Typy zmiennych
Dlatego lepiej się zabezpieczyć i przy deklaracji podać od razu typ zmiennej. Jest to słowo kluczowe, które określa jakiego typu będzie zmienna. Na obrazku poniżej przedstawiam to w postaci pudełek – po lewej uniwersalne pudełko, bez podania typu. A po prawej cztery podstawowe typy używane w GDScript. Kolorowe kształty pokazują, że do pudełka możemy wcisnąć tylko konkretny typ danych.

Wspomniane typy to:
- int – z ang. integer – liczba całkowita
- float – z ang. float – liczba zmiennoprzecinkowa (dla uproszczenia po prostu liczba mogąca mieć coś po przecinku). Pamiętaj, że w GDScript (jak i większości innych języków programowania) separatorem dziesiętnym jest kropka, nie przecinek!
- bool – zmienna logiczna mogąca przyjmować dwie wartości – true (prawda) lub false (fałsz)
- String – po angielsku łańcuch – czyli łańcuch znaków otoczony znakami „” (cudzysłów) lub ” (apostrof). Zwracam uwagę, że nazwa typu jest napisana wielką literą – oznacza to, że jest to klasa. Do czego może nam się to przydać napiszę w jednym z kolejnych odcinków. Teraz tylko zwracam uwagę na ten istotny szczegół.
Tworząc zmienną i podając typ mówimy o typowaniu zmiennych. Typowanie odbywa się poprzez dodanie dwukropka i typu zmiennej przed podaniem wartości:
extends Node
var gracz_moze_skakac: bool = true
var ile_zyc: int = 9
var cena_broni: float = 13.37
var nazwa_planszy: String = "Slipgate Complex"
var zmienna_bez_typu
var zmienna_z_typem: int
func _ready()->void:
print(gracz_moze_skakac)
print(ile_zyc)
print(cena_broni)
print(nazwa_planszy)
print(zmienna_bez_typu)
print(zmienna_z_typem)
I tutaj świetnie widać właściwości, o których wyżej pisałem:
true
9
13.37
Slipgate Complex
<null>
0
- Zmienna typu bool z przypisaną wartością true
- Zmienna typu int z przypisaną wartością 9
- Zmienna typu float z przypisaną wartością 13.37
- Zmienna typu String z przypisaną wartością Slipgate Complex
- Zmienna bez podanego typu
- Zmienna typu int – typ jest określony, więc jej zerową wartością jest 0.
Podstawy operacji na zmiennych
Uruchom teraz poniższy kod:
extends Node
var ile_zyc: int = 9
var cena_broni: float = 13.37
var nazwa_planszy: String = "Slipgate Complex"
var nazwa_pokoju: String = "Entrance"
var nowa_zmienna: int
func _ready()->void:
cena_broni = cena_broni + 4.3
print(cena_broni)
ile_zyc = ile_zyc - 3.3
print(ile_zyc)
nazwa_planszy = nazwa_planszy + " " + nazwa_pokoju
print(nazwa_planszy)
nowa_zmienna = 5 + 4.6
print(nowa_zmienna)
Wynikiem będzie:
17.67
5
Slipgate Complex Entrance
9
Kilka wniosków z powyższego (specjalnie pomijam typ bool, bo na tym typie będziemy wykonywać operacje logiczne, które opiszę kiedy indziej):
- zmienne typu int i float możemy dodawać, odejmować, mnożyć i dzielić (tylko nie przez zero 😉 Próba zapisania liczby z przecinkiem do int skutkuje zaokrągleniem w dół.
- zmienne typu String możemy do siebie dodawać (ale nie odejmować!)
I jeszcze taka uwaga na koniec – w przypadku funkcji print można wykonać obliczenia od razu w jej parametrach ALE trzeba pamiętać, że cokolwiek jej podacie – próbuje skonwertować to jak najdokładniej na łańcuch. Może to prowadzić do kłopotów (np. jak liczycie kasę;)
Uruchom poniższy przykład, żeby zobaczyć o czym mówię:
extends Node
var numer_planszy: int = 9
func _ready()->void:
print(numer_planszy + 4.5)
numer_planszy = numer_planszy + 4.5
print(numer_planszy)
Wynik w pierwszym przypadku może zaskoczyć:
13.5
13
Warto o tym pamiętać!
Na zakończenie
Jak widać nie takie zmienne straszne w Godocie – w następnym odcinku opowiem jeszcze więcej o obliczeniach oraz pokażę jak je zastosować w praktyce – wyświetlając ruchome sprajty.
Opublikuj komentarz