FANDOM


W poprzednim artykule przedstawiłem jak posługiwać się skryptem lua. Ten artykuł pokaże Ci w jaki sposób korzystać z wiedzy zdobytej w poprzednim kursie oraz przekaże Ci wiedzę do tego potrzebną. Dzięki temu artykułowi będziesz już mógł pisać skrypty integrujące w działanie gry. Dzięki temu artykułowi będziesz mógł tworzyć własne narzędzia, bronie, mechanizmy gry,  mechanizmy przedmiotów, zaawansowane pojazdy, npc i wiele, wiele więcej, ponieważ będziesz wiedział jak to zrobić(i byćmoże zrobię osobne tutoriale o tych rzeczach).


Obiekty i ich lokalizacjaEdytuj

Dotychczas wszystkie skrypty, które pisaliśmy opierały się na danych wewnątrz skryptu. Ten rozdział spowoduje, że wyjdziesz poza jego granice niczym płazy wyszły z wody na ląd drogą ewolucji.

Istnieją dwie lokalizacje początkowe: lokalna i globalna.

globalna zaczyna się od obiektu game, a lokalna od obiektu script.

Dostęp do lokalizacji globalnej uzyskujemy po prostu poprzez wpisanie do skryptu game(tak samo jest ze script). Zwróci nam to zmienną typu Instance(o tym później), która służy do przechowywanie wszystkich danych planszy. Popatrz na okno Explorer. Wszystkie widoczne tam(a także ukryte) obiekty należą do Workspace.

"Rodzicielstwo" obiektówEdytuj

Rozwiń "Workspace" w oknie Explorer. Pojawii Ci się kilka obiektów;Camera, Terrain, Baseplate, Script(ten, który utworzyłeś jeszcze w poprzednim artykule). Te wszystkie obiekty są Dziećmi(child) obiektu Workspace, a Workspace jest ich Rodzicem(Parent). Posiadając zmienną przechowującą obiekt możemy się dostać do Rodzica lub Dziecka tego obiektu.

Za dostęp do rodzica odpowiedzialna jest zmienna Parent. Zmienna ta należy do obiektu, więc aby dostać się do rodzica trzeba napisać zmienną przechowującą obiekt, a obok kropkę i "Parent".

Schemat:

<zmienna przechowująca obiekt>.Parent

Taką zmienną, która przechowuje obiekt jest wspomiana przeze mnie zmienna script.

Przykład:

rodzic 
= script.Parent


Dostęp do Dziecka możemy uzyskać poprzez pewnej wywołanie funkcji należącej do danego obiektu. W odróżnieniu od zwykłych funkcji, aby uzyskać dostęp do funkcji obiektu musimy wpisać zmienną przechowującą ten obiekt, a następnie dwukropek i funkcję, czyli FindFirstChild(), w której jako argument musimy wpisać nazwę Dziecka.

Schemat:

<zmienna przechowująca obiekt>:FindFirstChild(<nazwa dziecka>)

Przykład:

dziecko 
= game:FindFirstChild("Workspace")

Funkcja ta nazywa się FindFirstChild(znajdź pierwsze Dziecko), ponieważ kilka obiektów może nosić tę samą nazwę i funkcja zwróci pierwszy obiekt z taką nazwą.

Pola i metody obiektówEdytuj

Każdy obiekt typu Instance posiada własne zmienne i funkcje, które w pewien sposób wpływają na jego działanie. Zmienne w obiektach nazywane są Polami(Properiets), a funkcjie Metodami(Methods).

Dziedziczenie klasEdytuj

Podstawowym typem obiektów(klasą) w całej grze roblox jest typ Instance. Typ ten przechowuje podstawowe pola mówiące o jego lokalizacji(Parent ), nazwie(Name ), nazwie klasy(ClassName ) i widoczności(Archivable ).

Instance posiada także podstawowe funkcje usuwające[Destroy()], usuwające Dzieci[ClearAllChildren()], klonujące[[[Clone()]] ], zwracające Dzieci[[[FindFirstChild()]] i GetChildren() ] i trzy sprawdzające.

Jeżeli klikniesz w jakikolwiek inny obiekt na anglojęzycznej wikii , to zobaczysz, że posiada te sam pola i metody. A to za sprawą dziedziczenia. Dziedziczenie sparawia, że klasy, które dziedziczą po innej klasie posiadają te pola i te metody, co ta pierwsza klasa, a Instance jest klasą podstawową i jeżeli jakaś klasa nie dziedziczy bezpośrednio po niej, to dziedziczy po klasie, która dziedziczy po Instance(np. Instance>FormFactorPart>Part) itd.

ZdarzeniaEdytuj

Trzecią częścią każdego obiektu(po za polami i metodami) są zdarzenia(event). Służą one do informowania skryptu o zmianach względem poprzedniej klatki gry. Dostęp do zdarzenia otrzymuje się tak jak do pola(poprzez znak kropki). Następnie należu użyć jednej z pięciu metod tzw. listenera. W tym artykule używał będę jedynie tej najpraktyczniejszej - connect(). Dostęp do tej metody otrzymuje się tak jak do zwykłej, czyli po zdarzeniu należy umieścić dwukropek i funkcję listenera. Connect jako argument przyjmuje funkcję. Ważne jednak jest, by wprowadzić jedynie jej nazwę, bez nawiasów.

Schemat:

<obiekt>.<zdarzenie>:connect(<funkcja>)

Przykład A:

function cout(dzieciak)
    print("Mam nowego dzieciaka!");
    print(dzieciak.ClassName);
end
script.ChildAdded:connect(cout)

Jeżeli damy naszej funkcji do wykonania przez connect() argument, to funkcja listenera zwróci do niego wartość zależnie od zwracanej przez zdarzenie wartości. Zdarzenie "ChildAdded" zprawdza, czy  zostało dodane nowe dziecko. Jeżeli tak, to zwraca do funkcji wewnątrz listenera zmienną zawierającą obiekt tego dziecka. Dlatego, gdy nowe dziecko zostanie dodane do obiektu script, to wypisana w konsoli zostanie nazwa klasy tego dziecka.

Przykład B:

script.ChildAdded:connect(function(dzieciak)
    print("Mam nowego dzieciaka!");
    print(dzieciak.ClassName);
end)

Nie musisz definiować funkcji na zewnątrz zdarzenia. Jeżeli wolisz nie zaśmiecać linijek; możesz zdefiniować funkcję wewnątrz zdarzenia w taki właśnie sposób.

Konstruktory i nowe typy danychEdytuj

Już wiesz jak kontrolować istniejące obiekty z poziomu skryptu. Nie wiesz jednak w jaki sposób jest tworzyć. Za tworzenie obiektów odpowiedzialne są konstruktory, czyli funkcje należące bezpośredno do danego obiektu. Zanim jednak zaczniesz "konstruować" swoje nowe zmienne, muszę Cię z nimi zapoznać.

Oto najważniejsze typy w ROBLOX:

Nazwa typu Zastosowanie
Instance Przechowywanie wszystkich obiektów gry
Vector2 Przechowywanie dwuwymiarowych wartości zmiennoprzecinkowych(np. współrzędnych kartezjańskich)
Vector3 Przechowywanie trójwymiarowych wartości zmiennoprzecinkowych. Stosowany do określenia pozycji, wielkości i rotacji.
CFrame Macierz zawierająca pozycję i rotację. Jeden z najbardziej zaawansowanych typów
BrickColor Przechowuje proste barwy opierające się na tekstowych(string) nazwach
Color3 Przechowuje barwę złożoną z trzech wartości zmiennoprzecinkowych określających  barwę(czerwony, zielony i niebieski)
Content Przechowuje pliki multimedialne. Opiera się na linku do danych w formie tekstowej
UDim2 Przechowuje dwuwymiarowe wartości zmiennoprzecinkowe odpowiedzialne za położenie i skalę. Używane jest m.in. w GUI
Ray Odpowiada za rzucanie promienia
Enumeration Typ wyliczeniowy, czyli przechowujący listę możliwych opcji. Służy m.in. do określania, o którą ścianę klocka chodzi, do wybrania typu kamery i do wielu inych rzeczy.

Jak dotąd do czynienia miałeś jedynie z  Instance, czyli zmienną odpowiedzialną za przechowywanie obiektów gry. Jest to najważniejsza zmienna w całeś bibliotece, ponieważ pozwala na uzyskanie dostępu do innych zmiennych odpowiedzialnych za działanie gry.

Za pomocą konstruktora do Instance można stworzyć nowy zupełnie obiekt i przypisać go do zmiennej. W tym celu należy napisać Instance, obok kropkę i funkcję konstruktora. Instance posiada tylko jeden konstruktor new(), który jako argumenty przyjmuje nazwę klasy(typu) obiektu i jego lokalizację. Na przykład jeżeli chcemy stworzyć obiekt typu Part i umieścić go w Workspace:

Instance.new("Part", game.Workspace)

Konstruktor ten pozwala jeszcze na utworzenie obiektu bez podania lokalizacji. Dzięki temu można to zrobić później:

klocek = Instance.new("Part");
klocek.Parent = game.Workspace;

A więc ogólny szkielet konstruktora wygląda tak:

<nazwa klasy>.<konstruktor>(<argumenty>)

Korzystanie z oficjalnej wikiEdytuj

Roblox posiada oficjalną, anglojęzyczną wiki. Znajduje się tam cała dokumentacja, czyli spis wszystkich klas, funkcji i wielu przydatnych rzeczy. Pisanie skryptu bez pomocy oficjalnej wiki jest niemalże niemożliwe, a z pewnością niewykonalne dla nowicjuszy. Dlatego, żeby poskromić skrypty, musisz najpierw nauczyć się korzystać z wiki i stosować tamtejsze informacje w swoim kodzie. Jako, że jest to tylko i wyłącznie strona internetowa, nie powinno Ci to sprawić trudności. Jednak już tu trzeba wspomieć, że wymagana jest znajomość angielskiego na takim poziomie, by zrozumieć chociaż część z opisów klas na wiki, ponieważ mogą one zawierać bardzo ważne i przydatne informacje

PrzykładyEdytuj

Najlepszą nauką jest praktyka. Dzięki poniższym artykułom zrozumiesz w jaki sposób tworzyć przeróżne rzeczy za pomocą skryptów:

Towrzenie drzwi dla VIP'ów

Tworzenie teleportu

Tworzenie KeyPad'a

Tworzenie pojazdów latających

Tworzenie broni białej

Tworzenie broni palnej

Tworzenie NPC

Tworzenie Lobby

Tworzenie Inwentarzu

Tworzenie wielomapowej gry

Tworzenie systemu zapisu stanu gry

Tworzenie komend admina

Ad blocker interference detected!


Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.