Struktury danych są sposobem, w jaki kodery przechowują i organizują całe zestawy danych. W Lua struktury danych są tworzone z tabelami. Tabelki mogą zawierać dowolną liczbę wartości.
Ten artykuł dotyczy używania 阵 , specjalnego wpisywaćtabeli, aby stworzyć mówiącego postaci.
Tabela
Tabelki są typami danych, które mogą zawierać wiele wartości. W przeciwieństwie do innych typów danych, które gromadzą jedną wartość, tabelki nie mają stałego rozmiaru i mogą pomieścić mieszankę różnych typów wartości. Z tabelami możesz przechowywać przedmioty w ekwipunku gracza lub stworzyć listę tysięcy imion graczy.
Materiały
Istnieją różne rodzaje tabel. Jeden rodzaj to lista, która przechowuje listy wartości w określonej kolejności. Aby utworzyć listę, utwórz zmienne i przypisz im pionowe klamry { } . Odrębne wartości w klamrach z komami jak poniżej:
local myArray = {"item1", "item2", 10, workspace.Part, myVariable}
Tworzenie mówiącego postaci
Aby zbadać matryce, będziesz pracować z niewystarczającym postacią (NPC), który po kliknięciu wyświetla inną linię dialogu.
Ten projekt będzie używał gotowego modelu NPC, który obejmuje częściowy skrypt i Prompt Detector, ale brakuje dialogu.
W Explorerze, importuj NPC, klikając prawym przyciskiem na Pracę > Z pliku i wybierając zapis z pliku.
Kodowanie Arrays Dialogu
Te kroki używają matryki, aby przechować różne frazy dla NPC, aby powiedzieć, gdy gracze z nim interagują.
W Explorer , przejdź do NPC > ProximityPrompt > ChatManager.
W ChatManager, gdzie zaznaczono w skrypcie, utwórz pustą maszynę przypisową , aby przechować opcje dialogu.
-- Cykle poprzez dialog w czacie, gdy jest używanylocal Chat = game:GetService("Chat")local prompt = script.Parentlocal npc = prompt.Parentlocal characterParts = npc.CharacterPartslocal head = characterParts.Head-- Dodaj tutaj arkuszlocal dialogueArray = {}local function speak()local dialogue = "I've got one thing to say!"Chat:Chat(head, dialogue)endprompt.Triggered:Connect(speak)W ciągu nawiasów {} arkuszu stworzonego właśnie, wpisz co najmniej trzy linijki dialogu, oddzielone przez kropki.
local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}
Używanie wskaźników mat阵
Każda wartość w matrycy ma przypisany index numer. Indeksy przydzielane są w kolejności, w której są one przechowywane. Pierwsza wartość jest na indeksie 1, druga na indeksie 2 itp.
Niektóre języki programowania, takie jak Java, zaczynają wskaźniki na 0.
W właśnie utworzonym masz śródka "Hi" i "Goodbye!" jest na indeksie 1, a jest na indeksie 3.
Indeks | Wartość |
---|---|
1 | Cześć |
2 | Dzisiejszy dzień jest wielki! |
3 | Dzięki! |
Używanie określonych wartości indeksu
Użyj wartości indeksowych, aby przypisać określne elementy dialogu dla NPC. Aby użyć wartości w określonym indeksie, dodaj wartość w nawiasach bezpośrednio po imieniu wiersza, jak dialogueArray[1] .
Zastąp wartość domyślną zmiennej dialogue przez wartość indeksu 2.
local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}local function speak()local dialogue = dialogueArray[2]Chat:Chat(head, dialogue)endZagrajtestuj i kliknij NPC. Druga wartość zmiennej znajdzie się w oknie czatu. Spróbuj zmienić kod, aby przetestować każdą wartość w tabeli.
Zmiany linii dialogu
Gdy gracz wchodzi w interakcję z postacią NPC, zawsze mówi ta sama linia. To nudne. Zamiast tego użyj zmiennej, aby aktualizować którą wartość indeksu użyć.
Zawsze, gdy gracz wchodzi w interakcję z NPC, zwiększ wartość zmiennej o 1, aby wyświetlić następny dialog.
Aby utrzymać bieżący indeks, dodaj nową zmienną o nazwie dialogueIndex . Ustaw zmienną na 1, aby rozpocząć na początku matrycy.
local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}local dialogueIndex = 1W speak() zastąp place numerem indeksu w dialogueArray[2] zmienną właśnie utworzyłeś.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)endPod koniec funkcji dodać 1 do dialogueIndex. W następnym razie, gdy speak() jest wezwany, dialog wyświetli następny ciąg znaków.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)dialogueIndex += 1endZagrajtestuj i kliknij NPC, aby zobaczyć każdą wiadomość dialogową z maszyny.
Zauważ, że istnieje błąd w Okieniu Wyjściu, gdy skrypt dotrze do końca matryki.
Naprawisz to w następnym sekcji, aby dialog zaczął się od początku po pokazaniu ostatniego ciąg.
Rozmiary matryc
Możesz użyć rozmiaru matryki, aby wiedzieć, kiedy ustawić pożądany indeks na 1. Znajdź rozmiar materiałki matryki poprzez wpisanie # , bez spacji, przed imieniem matryki.
Na przykład: #dialogueArray
Sprawdź rozmiar matryцы w porównaniu z aktualną wartością zmiennej, aby wiedzieć, kiedy jest czas, aby powrócić do początku.
Restart dialogu
Użyj rozmiaru matryцы, aby sprawdzić, kiedy jest czas na powrót do pierwszej części dialogu.
Dodaj oświadczenie if i sprawdź, czy dialogueIndex równa się #dialogueArray, całkowitej wielkości tego zapisu. Jeśli tak, ustaw dialogueIndex na 1.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)if dialogueIndex == #dialogueArray thendialogueIndex = 1enddialogueIndex += 1endJeśli dialogueIndex nie jest na kończyć, nadal należy dodać 1 do dialogueIndex. Przenieś dialogueIndex += 1 pod inną deklarację.
local function speak()local dialogue = dialogueArray[dialogueIndex]Chat:Chat(head, dialogue)if dialogueIndex == #dialogueArray thendialogueIndex = 1elsedialogueIndex += 1endendGraj i potwierdź, że możesz przejść przez i ponownie uruchomić dialog.
Podsumowanie
Struktury danych są sposobem przechowywania zestawów danych. Lua używa tabel, aby tworzyć struktury danych. Arrays są rodzajem tabeli, które mogą zawierać zestawy informacji w porządku. Każdy wartość w matrycy otrzymuje numer indeksu, zaczynając od indeksu 1.
Ten skrypt użył matryki, aby stworzyć listę możliwych linii dialogowych dla niemożliwego postaci (NPC).
Ukończony skrypt
-- Cykle poprzez dialog w czacie, gdy jest używany
local Chat = game:GetService("Chat")
local prompt = script.Parent
local npc = prompt.Parent
local characterParts = npc.CharacterParts
local head = characterParts.Head
-- Dodaj tutaj arkusz
local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}
local dialogueIndex = 1
local function speak()
local dialogue = dialogueArray[dialogueIndex]
Chat:Chat(head, dialogue)
if dialogueIndex == #dialogueArray then
dialogueIndex = 1
else
dialogueIndex += 1
end
end
prompt.Triggered:Connect(speak)
Wskazówki dotyczące rozwiązywania problemów
Jeśli postać nie przechodzi przez maszynę rozmów, spróbuj następujących wskazówek do rozwiązania problemów.
- Sprawdź, czy dialogueIndex jest ustawiony na 1. W innej wypowiedzi sprawdź, czy dialogueIndex ma 1 dodatkowy do siebie.
- Gdy otrzymujesz rozmiar matryki, upewnij się, że nie ma żadnych spacji po # w #dialogueArray .
Opcjonalne wyzwania
Spróbuj jednego z opcjonalnych wyzwań poniżej.
- Zakoduj skrypt, aby dialog NPC przeszedł przez matrycę. Indeks dialogu powinien zacząć się na matrycy i odejmować za każdym razem, zamiast dodać.
- Zamiast pokazywać dialog w porządku, NPC pokaż losową linię dialogu za każdym razem, używając Random.new() . Samouczek jest włączony poniżej do odniesienia.
local randomGenerator = Random.new()
-- Pokazuje nowy dialog, gdy kliknięty zostanie NPC
local function speak()
local randomIndex = randomGenerator:NextInteger(1, #dialogueArray)
local dialogue = dialogueArray[randomIndex]
Chat:Chat(head, dialogue)
end