×

Podstawy GDScript – część 2 – zmienne (Godot tutorial po polsku)

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)

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
  • floatz 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

  1. Zmienna typu bool z przypisaną wartością true
  2. Zmienna typu int z przypisaną wartością 9
  3. Zmienna typu float z przypisaną wartością 13.37
  4. Zmienna typu String z przypisaną wartością Slipgate Complex
  5. Zmienna bez podanego typu
  6. 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