Przeglad wstępny do arrayów

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.

Struktury danych to sposób, w jaki programiści przechowują i organizują całe zestawy danych.W Luau struktury danych są tworzone za pomocą tabel. Tabele mogą zawierać dowolną liczbę wartości.

Ten artykuł dotyczy używania matryc , specyficznego wpisywaćtabeli, do tworzenia mówiącej postaci.

Tabelki

Tabele są rodzajami danych, które mogą zawierać wiele wartości.W przeciwieństwie do innych typów danych, które przechowują pojedynczą wartość, tabele nie mają stałego rozmiaru i mogą zawierać miks różnych typów wartości.Dzięki tablicom możesz przechowywać przedmioty w ekwipunku gracza lub stworzyć listę tysięcy nazw graczy.

Matryce

Istnieją różne rodzaje tabel.Jeden typ to matryca , która przechowuje listy wartości w określonej kolejności.Aby utworzyć tablicę, utwórz zmienną i przypisz jej klamry krzywe { } .Oddzielne wartości wewnątrz nawiasów za pomocą przecinków tak jak poniżej:

local myArray = {"item1", "item2", 10, workspace.Part, myVariable}

Stwórz rozmawiającą postać

Aby zbadać matryce, będziesz pracować z niedostępną postacią (NPC), która, po kliknięciu, wyświetla inną linię dialogu.

Ten projekt wykorzysta gotowy model NPC, który zawiera częściowy skrypt i wykrywacz poleceń, ale brakuje dialogu.

  1. Pobierz szablon NPC.

  2. W Explorer, importuj NPC, klikając prawym przyciskiem myszy na Przestrzeń roboczą > Wstaw z pliku i wybierz pobrany plik.

Zakoduj tablicę dialogów

Te kroki wykorzystują tablicę do przechowywania różnych fraz dla NPC, które powie, gdy gracze z nim interakują.

  1. W Eksploratorze , przejdź do NPC > ProximityPrompt > ChatManager.

  2. W ChatManager, gdzie oznaczono w skrypcie, utwórz pustą próżniową matrycę , aby przechować opcje dialogu.


    -- Przejścia między dialogiem czatu, gdy wysłana jest prośba
    local Chat = game:GetService("Chat")
    local prompt = script.Parent
    local npc = prompt.Parent
    local characterParts = npc.CharacterParts
    local head = characterParts.Head
    -- Dodaj tutaj array
    local dialogueArray = {}
    local function speak()
    local dialogue = "I've got one thing to say!"
    Chat:Chat(head, dialogue)
    end
    prompt.Triggered:Connect(speak)
  3. W nawiasach {} z właśnie utworzonej matrycy, wprowadź co najmniej trzy struny dialogu, oddzielone przecinkami.


    local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}

Użyj indeksów array

Każda wartość w arrayu otrzymuje numer index.Indeksy są przypisywane do wartości w kolejności, w której są przechowywane wartości.Pierwsza wartość jest na indeksie 1, druga na indeksie 2 itd.

Niektóre języki kodowania, takie jak Java, rozpoczynają indeksy na 0.

W właśnie utworzonej matrycy, "Hi" jest na indeksie 1, a "Goodbye!" jest na indeksie 3.

IndeksWartość
1Hi
2Dzisiaj jest świetny dzień!
3Do widzenia!

Użyj określonych wartości indeksu

Użyj wartości indeksu, aby przypisać określone części dialogu do NPC.Aby użyć wartości w określonym indeksie, dodaj indeks w nawiasach bezpośrednio po nazwie matrycy, tak jak dialogueArray[1] .

  1. Zastąp domyślną wartość ciągu zmiennej dialogue wartością indeksu 2.


    local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}
    local function speak()
    local dialogue = dialogueArray[2]
    Chat:Chat(head, dialogue)
    end
  2. Przetestuj i kliknij NPC. Druga wartość wiersza powinna pojawić się w bąbelku czatu. Spróbuj zmienić kod, aby przetestować każdą wartość w tabeli.

Zmień linie dialogowe

Kiedy gracz wchodzi w interakcję z NPC, NPC zawsze powie tę samą linię.To jest nudne.Zamiast tego użyj zmiennej, aby aktualizować wartość indeksu, którą należy użyć.

Zawsze, gdy gracz wchodzi w interakcję z NPC, zwiększ wartość zmiennej o 1, aby wyświetlić następną linię dialogu.

  1. Aby śledzić obecny 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 = 1
  2. W speak() , zastąp numer indeksu w dialogueArray[2] zmienną, którą właśnie stworzyłeś.


    local function speak()
    local dialogue = dialogueArray[dialogueIndex]
    Chat:Chat(head, dialogue)
    end
  3. Na dole funkcji dodaj 1 do dialogueIndex. Następnym razem, gdy speak() zostanie wezwany, dialog wyświetli następną ciąg.


    local function speak()
    local dialogue = dialogueArray[dialogueIndex]
    Chat:Chat(head, dialogue)
    dialogueIndex += 1
    end
  4. Przetestuj i kliknij NPC, aby zobaczyć każdą linijkę dialogu z listy.

Zauważ, że wystąpił błąd w oknie wyjścia , gdy skrypt dotrze do końca matrycy.

Naprawisz to w następnej sekcji, więc dialog zostanie ponownie uruchomiony od początku po wyświetleniu ostatniej ciąg.

Rozmiary matrycy

Możesz użyć rozmiaru matrycy, aby wiedzieć, kiedy należy zresetować pożądany indeks do 1.Znajdź rozmiar zbioru poprzez wpisanie # bez spacji przed nazwą zbioru.

Na przykład: #dialogueArray

Sprawdź rozmiar matrycy w porównaniu z obecną wartością zmiennej, aby wiedzieć, kiedy nadszedł czas, aby zacząć od początku.

Uruchom ponownie dialog

Użyj rozmiaru matrycy, aby sprawdzić, kiedy nadszedł czas, aby powrócić do pierwszego kawałka dialogu.

  1. Dodaj oświadczenie if i sprawdź, czy dialogueIndex równa się #dialogueArray, ogólna wielkość tego obiektu. Jeśli tak, ustaw dialogueIndex na 1.


    local function speak()
    local dialogue = dialogueArray[dialogueIndex]
    Chat:Chat(head, dialogue)
    if dialogueIndex == #dialogueArray then
    dialogueIndex = 1
    end
    dialogueIndex += 1
    end
  2. Jeśli dialogueIndex nie jest na kończyć, nadal powinno dodać 1 do dialogueIndex. Przesuń dialogueIndex += 1 pod wyrażeniem else.


    local function speak()
    local dialogue = dialogueArray[dialogueIndex]
    Chat:Chat(head, dialogue)
    dialogueIndex = if dialogueIndex == #dialogueArray then 1 else dialogueIndex + 1
    end
  3. Zagraj i potwierdź, że możesz przejść przez dialog i ponownie go uruchomić.

Podsumowanie

Struktury danych są sposobem przechowywania zestawów danych.Luau używa tabel do tworzenia struktur danych.Tabele są rodzajem tabel, które mogą zawierać uporządkowane listy informacji.Każda wartość w obrębie array otrzymuje numer indeksu, począwszy od indeksu 1.

Ten skrypt użył tablicy, aby stworzyć listę możliwych linii dialogowych dla niedostępnej postaci (NPC).

Zakończony skrypt

-- Przejścia między dialogiem czatu, gdy wysłana jest prośba
local Chat = game:GetService("Chat")
local prompt = script.Parent
local npc = prompt.Parent
local characterParts = npc.CharacterParts
local head = characterParts.Head
-- Dodaj tutaj array
local dialogueArray = {"Hi!", "Do I know you?", "Goodbye!"}
local dialogueIndex = 1
local function speak()
local dialogue = dialogueArray[dialogueIndex]
Chat:Chat(head, dialogue)
dialogueIndex = if dialogueIndex == #dialogueArray then 1 else dialogueIndex + 1
end
prompt.Triggered:Connect(speak)

Wskazówki dotyczące rozwiązywania problemów

Jeśli postać nie przechodzi przez listę dialogów, spróbuj następujących wskazówek rozwiązywania problemów.

  • Sprawdź, czy stwierdzenie if jest ustawione na 1, w przeciwnym razie sprawdź, czy dialogueIndex zostało dodane do niego 1. W oświadczeniu else sprawdź, czy dialogueIndex ma dodane 1 do siebie.
  • Gdy uzyskujesz rozmiar matrycy, upewnij się, że nie ma spacji po # w #dialogueArray.

Opcjonalne wyzwania

Spróbuj jednego z opcjonalnych wyzwań poniżej.

  • Skoduj skrypt, aby dialog NPC cofał się wstecz przez array.Indeks dialogu powinien zacząć się od array i odliczać za każdym razem zamiast dodawać.
  • Zamiast pokazywać dialog w kolejności, pozwól, aby NPC wyświetlał losową linię dialogu za każdym razem, używając Random.new().Poniżej znajduje się przykładowy skrypt do odwołania

local randomGenerator = Random.new()
-- Pokazuje nowy dialog za każdym razem, gdy kliknięty jest NPC
local function speak()
local randomIndex = randomGenerator:NextInteger(1, #dialogueArray)
local dialogue = dialogueArray[randomIndex]
Chat:Chat(head, dialogue)
end