Troman - tworzenie gier
Logo serwisu Troman.pl
Panel Logowania

Godot - podstawy GDscripta

napisał : tyser
14
sierpnia
2018
Tutorial przedstawiający składnię gdscripta
tagi : godot, gdscript, skrypt godot

Gdscript to jeden z dostępnych w Godocie języków programowania, który jest bardzo prosty i podobny do Pythona(część z Was pewnie już zna, ponieważ jest wykorzystywany w Blenderze). W tym tutorialu przedstawię jego składnię oraz omówię jak to wszystko działa, opisy postaram się żeby były tak łopatologiczne jak to tylko możliwe, tak żeby każdy był to w stanie zrozumieć od kompletnie zielonego początkującego po zawodowych programistów.

extends nazwa_noda

pojawia się zawsze w nowym skrypcie oznacza to tylko do którego noda jest podpięty skrypt jeśli zostawisz jak jest to będzie dobrze

#coś

komentarz - jak sama nazwa wskazuje służy do komentowania jeśli np.piszesz skomplikowany algorytm i nie chcesz zapomnieć o co w nim chodziło lub chcesz ułatwić odczytanie swojego kodu komuś innemu, komentarz działa w ten sposób, że wszystko po znaku # do końca linii jest ignorowane przez Godota i nie odtwarzane więc można tu wpisywać cokolwiek

print()

podstawowa funkcja wypisująca w konsoli to co chcemy jeśli chcemy wyświetlić w konsoli jakiś napis to w nawiasy wpisujemy tekst między cudzysłowami np. print("hello") wypisze hello, jeśli chcemy wypisać zawartość jakiejś zmiennej to po prostu wpisujemy jej nazwę w nawiasy np. print(zmienna)

var nazwa_zmiennej = wartość

definicja zmiennej(zmienna to element służący do przechowywania różnych wartości, zmienne mogą być różnych typów podstawowe typy to:

  • int - liczby całkowite np. 1, 28, 45
  • float - liczby z częścią po przecinku tzw.zmiennoprzecinkowe np. 1.5, 25.4, 35.6 zapisywać liczby zmiennoprzecinkowe należy z kropką 1.5 nie z przecinkiem 1,5, ponieważ w gdscripcie i w sumie każdym innym języku programowania przecinek oddziela osobne wartości więc zapis 1,5 został by potraktowany jako dwie liczby 1 i 5 a nie jedna z częścią po przecinku 1.5
  • char - litery i znaki interpunkcyjne a także ich ciągi np. "a","abcd","itp." żeby wartość została potraktowana jako char przy przypisywaniu musi być w cudzysłowie "" lub ''
  • arr - tablice np.[1,"abc",1.5] służą do przechowywania wielu wartości, żeby uzyskać dostęp do danego miejsca w tablicy wystarczy podać nazwę zmiennej z nawiasem kwadratowym w którym jest numer elementu tablicy elementy są numerowane od lewej do prawej zaczynając od zera np.a = [1,2,3] żeby dostać element drugi czyli 2 wpiszemy a[1]
  • dict - słowniki przechowują pary wartości np.{"klucz":"wartość",1:2} wartości mogą być dowolnego typu po obu stronach żeby dodać nową wartość do słownika już po zdefiniowaniu wystarczy podać nazwę zmiennej z nawiasem kwadratowym i kluczem w jego środku kluczem może być dowolnego typu wartość a następnie przypisać do tego nową wartość także dowolną)

var a = 12 #zdefiniowanie zmiennej i przypisanie jej wartości 12 przez co zmienna staje się typu int
var b #zdefiniowanie zmiennej bez przypisania wartości
a = 5.5 #przypisanie zmiennej wartości 5.5 przez co staje się typu float
a = "abc" #przypisanie zmiennej wartości "abc" i zmiana typu na char
b = a #przypisanie wartości zmiennej a do zmiennej b
a = 15
b = 12.5
b = a + b # dodanie wartości dwóch zmiennych i przypisanie do b inne możliwe operacje matematyczne to 
b = b - a #odejmowanie
b = a * b #mnożenie
b = a / b #dzielenie
b = a % b #dzielenie modulo zwraca resztę z dzielenia np. jeśli a = 5 a b = 3 zwróci wynik 2 ponieważ w 5 jest tylko jedna 3 a reszta to 2
b = b + 8 / a - 5 * 2 #przy dłuższych działaniach kolejność wykonywania działań będzie taka jak normalnie od prawej do lewej najpierw /* potem +- jeśli chcemy żeby któreś działanie wykonało się w pierwszej kolejności to trzeba wziąć je w nawias



const nazwa = wartość

Słowem kluczowym const deklaruje się tzw. stałe. Obiekty z modyfikatorem const mogą być inicjalizowane, natomiast nie mogą być przypisywane poza ich inicjalizacją.

func nazwa_funkcji(argument1,argument2):

funkcje to zestawy instrukcji które można wykorzystać w dowolnym miejscu kodu przez wpisanie nazwy funkcji z nawiasem na końcu. Wykorzystywane są np.kiedy trzeba zrobić w kodzie kilka razy to samo wtedy pisze się funkcję raz i tylko wywołuje w tych miejscach dzięki czemu kiedy trzeba coś zmienić wystarczy to zrobić raz a nie kilka razy w każdym miejscu osobno. W funkcji może być dowolny kod łącznie z wywołaniami funkcji(nie da się tylko zdefiniować funkcji w funkcji ale to po prostu głupie więc dobrze że się nie da). Zmienne zdefiniowane w funkcji istnieją tylko w funkcji więc jeśli chce się wyjąć ich wartość poza funkcję trzeba użyć instrukcji return natomiast jeśli chcemy użyć w funkcji zmiennej z poza tej funkcji trzeba dodać argument w funkcji i przy wywołaniu wpisać zmienną w odpowiednie miejsce w nawiasie w funkcji będzie można jej używać pod nazwą argumentu jaki podaliśmy w definicji

func add(a, b): #przykładowa funkcja pobierająca dwa argumenty i dodająca ich wartości
    return a + b #return zwraca wartość która jest za nim, a przy okazji jak zauważyłeś działania można wykonywać w dowolnych miejscach



wynik = add(2+5,8) 

wywołanie tej funkcji jak widać return zwraca wynik działania, ale trzeba go gdzieś przechować dlatego funkcje z return mogą być też wywołane w print() wtedy w konsoli wyświetli się wynik działania, tak jak już pisałem działań można używać wszędzie byle wynik pasował typem do tego co pobiera funkcja

if 10 < 11:
    print("True")
elif 10 > 11:
    print("False")
else:
    pass

instrukcje warunkowe sprawdzają czy podany warunek jest spełniony jeśli tak wykonują jakąś czynność(restrykcje co do kodu wewnątrz są takie same jak w funkcjach i tak samo jak tam zmienne zdefiniowane wewnątrz działają tylko wewnątrz ale można tu używać zmiennych zdefiniowanych na zewnątrz).

if a < b:
    pass

instrukcja if porównuje dwie lub więcej wartości. Przy porównywaniu wartości trzeba zawsze porównywać parami nie można porównać trzech na raz np. if a < b < c:. To nie zadziała możemy natomiast porównać kilka par wartości za pomocą instrukcji and i or. Jeśli użyjemy and np. if a < b and a > c: to oba warunki muszą być prawdziwe(prawdziwe oznacza że zwrócą wartość true np. 1 < 2 da wartość true ponieważ 1 jest mniejsze od 2 natomiast warunek odwrotny 2 < 1 dał by false ponieważ 2 nie jest mniejsze od 1) jeśli któryś jest fałszywy lub oba są fałszywe to kod wewnątrz nie zostanie wykonany. Jeśli użyjemy or to wystarczy że jeden(lub więcej) warunek będzie spełniony żeby kod w środku został wykonany jeśli żaden warunek nie będzie prawdziwy to kod nie zostanie wykonany

elif a > b:
    pass

instrukcja elif działa dokładnie tak samo jak if oprócz tego że może występować tylko po instrukcji if kolejność wykonywania jest wtedy taka: jeśli warunek w instrukcji if jest spełniony to wszystkie elif są pomijane jeśli nie jest spełniony to sprawdzane są wszystkie elif dopóki któraś nie jest spełniona wtedy wszystkie następne są pomijane jeśli żadna nie jest spełniona program przechodzi dalej i nic nie robi. elif przydaje się kiedy chcemy sprawdzić jedną zmienną kilka razy ponieważ po znalezieniu opcji która zwraca wartość true reszta jest pomijana gdyby do wszystkich sprawdzeń użyć if to sprawdzana była by każda możliwość co trwa dłużej i niepotrzebnie zużywa zasoby komputera

else:
    pass

dodaje się je na końcu może występować tylko po if i elif znaczy tyle co "w przeciwnym razie" czyli kiedy żadna z instrukcji wyżej nie zostanie spełniona(lub jeśli będziemy używać kilku instrukcji if jeśli instrukcja bezpośrednio nad else nie zostanie spełniona) wykonaj dany blok kodu(obostrzenia takie same jak w if i elif)

operatory warunkowe - operatory dostępne do porównywania wartości:

a == b #jeśli a jest równe b zwraca true
a != b #jeśli a nie jest równe b zwraca true
a < b #jeśli a jest mniejsze od b zwraca true
a > b #jeśli a jest większe od b zwraca true
a <= b #jeśli a mniejsze lub równe b zwraca true
a >= b #jeśli a większe lub równe b zwraca true



pass

używa się tego kiedy zdefiniuje się funkcję lub instrukcję(if/elif/else/while/for) ale nie mają jeszcze żadnej zawartości a chce się przetestować czy kod działa jeśli w takiej funkcji/instrukcji wpisze się tylko pass to program w tym miejscu się zatrzyma

while a < b:
    pass
for a in range(10)
    pass 

pętle służą do wykonania danej czynności wielokrotnie obostrzenia co do zawartości pętli są takie same jak w przypadku instrukcji if

while a < b:
    pass

pętla while wykonuje kod wewnątrz dopóki warunek lub warunki są prawdziwe. Pętla while przyjmuje warunki tak samo jak instrukcja if jeśli chcemy uzyskać pętlę nieskończoną(która wykonuje się cały czas i nigdy nie przestanie) wystarczy podać warunek który nigdy się nie zwróci false lub zamiast warunku wpisać true

for a in range(10):
    pass

pętla for wykonuje kod wewnątrz dopóki ma po czym iterować(odliczać) obostrzenia do kodu w środku są takie same jak w pętli while. Pętla for może iterować nie tylko po liczbach(w przykładzie pętla policzy od 1 do 10 więc wykonała się też 10 razy za każdym razem podając liczbę na której obecnie jest do zmiennej a co można wykorzystać w kodzie wewnątrz, ilość iteracji jest tu zależna od liczby jaką wpiszemy w funkcji range()) ale też po tablicach(co się często przydaje) wystarczy zamiast funkcji range() wpisać nazwę tablicy(nazwa zmiennej przed in też może być dowolna) i gotowe pętla wykona się tyle razy ile jest elementów w tablicy i za każdym razem kolejny element tablicy trafi do zmiennej a i będzie można go użyć w kodzie pętli

To tyle w tym tutorialu powinienem jeszcze omówić klasy obiekty i ogólnie programowanie obiektowe, ale stwierdziłem że lepiej zostawić to już na następny tutorial bo po pierwsze w gdscripcie jeszcze się tym zbytnio nie zajmowałem i będę musiał trochę się douczyć po drugie początkującym będzie łatwiej temat ogarnąć jeśli będą się uczyć po kawałku, a nie całe wiadro informacji na raz. Tak więc programowanie obiektowe będzie dopiero w następnym tutorialu razem z funkcjami wbudowanymi Godota.

Brak komentarzy
Dodaj komentarz
Aby dodać komentarz do newsa, musisz być zalogowany w Serwisie.. Zaloguj