Punkty weryfikacji

*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.

W poprzednich samouczkach uczyniłeś różnorodne funkcje doświadczenia, w tym znikające platformy i śmiertelna lawa. Ten samouczek łączy je w grę, w której użytkownicy widzą, kto może zostać żywy najdłużej. Każde sekunde, gdy są żywi, dodawana jest punktacja.

Ustawianie

Najpierw ustaw swoją scenę dla doświadczenia. Duplikuj nan platformy, które stworzyłeś w poprzednim samouczku, i pozwól użytkownikom konkurować, aby pozostać na tablicy platform przez jak najdłużej.

Możesz również użyć śmiertelnej lawy, aby zabić użytkowników, gdy spadają z platform, lub po prostu pozwolić im spaść na swoje doom. Upewnij się, że umieścisz Miejsce Spawnu gdzieś, gdzie użytkownicy mogą skakać na platformy, aby rozpocząć grę.

Punkty gracza

Roblox ma wbudowany Leaderboard do wyświetlania statystyk użytkownika. Gdy ustawisz wskaźniki gracza poprzez ranking, one pojawiają się na prawym stronie ekranu w doświadczeniu.

Leaderboard with username and points shown

Dowiesz się więcej spersonalizowanych sposobów na wyświetlanie informacji w późniejszych samouczkach, ale tablica wyników jest najprostszym sposobem na stworzenie widocznego systemu oceny w Roblox.

Najlepiej umieścić skrypty, które ustawiają stan doświadczenia w ServerScriptService , ponieważ będą automatycznie uruchomione, gdy doświadczenie zacznie się. W ServerScriptService stwórz skrypt o nazwie SetupPoints .

SetupPoints script in place in ServerScriptService in the Explorer window

Słuchaj graczy

W Roblox, usługa jest obiektem, który wykonuje zestaw przydatnych funkcji. Players usługa ma wydarzenie nazyjące się PlayerAdded, które możesz użyć do ustawienia punktów dla każdego użytkownika, który dołącza do doświadczenia.

Możesz uzyskać dostęp do usług za pomocą funkcji GetService w obiekcie game. game jest zmiennem dostępnym z dowolnego miejsca, które zawiera wszystko w twoim doświadczeniu.

  1. Utwórz zmienne dla usługi Graczy używając game:GetService("Players") .

  2. Utwórz funkcję nazwaną onPlayerAdded z parametrem dla gracza.

  3. Połącz funkcję onPlayerAdded z wydarzeniem PlayerAdded.


    local Players = game:GetService("Players")
    local function onPlayerAdded(player)
    end
    Players.PlayerAdded:Connect(onPlayerAdded)

Utwórz katalog statystyk

Aby wyświetlić punkty użytkownika na ranking, wszystko, co musisz zrobić, to stworzyć nowy Folder w ich obiekcie Player nazyającym się "leaderstats" i umieścić ich tam. Nowe obiekty można tworzyć od wewnątrz skryptu za pośrednictwem funkcji 2>Datatype.

  1. Utwórz nowy obiekt Folder używając Instance.new("Folder") , przechowując wynik w nowej zmiennej nazyającej się leaderstats .


    local function onPlayerAdded(player)
    local leaderstats = Instance.new("Folder")
    end
  2. Ustaw właściwość leaderstats``"leaderstats" na „leaderstats”.

  3. Parent leaderstats do player .


    local Players = game:GetService("Players")
    local function onPlayerAdded(player)
    local leaderstats = Instance.new("Folder")
    leaderstats.Name = "leaderstats"
    leaderstats.Parent = player
    end
    Players.PlayerAdded:Connect(onPlayerAdded)

Tworzenie punktów

System排行榜 czyta wszystkie wartości w leaderstatsOrdynator i wyświetla je, co znajdzie.

Aby dodać statystykę, która będzie śledzić punkty gracza, nowy obiekt IntValue może być powiązany z katalogiem leaderstats. Imię obiektu value będzie wyświetlane obok jego obecnej wartości.

  1. Użyj zmiennej nazywającej się points, aby utworzyć nowy obiekt IntValue używając Instance.new() .
  2. Ustaw Name na "Points".
  3. Ustaw Value na 0, aby 0 było pierwszą liczbą wyświetlaną na graczwyników.
  4. Parent the points object to the leaderstats folder.

local Players = game:GetService("Players")
local function onPlayerAdded(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local points = Instance.new("IntValue")
points.Name = "Points"
points.Value = 0
points.Parent = leaderstats
end
Players.PlayerAdded:Connect(onPlayerAdded)

Sprawdź swoją eksperyencję i powinieneś zobaczyć tabelę liderów po prawej górze z imionami swoich użytkowników i wynikiem punktów obok nich.

Czas liczenia

Każdy użytkownik powinien zarobić punkt za każdą sekundę życia. Loop while i funkcja Library.task.wait() mogą być używane do aktualizacji wartości punktów co sekundę.

  1. Na końcu skryptu utwórz pęętę while z true jako warunkiem.
  2. W pętli, task.wait() dla 1 sekundy.

Players.PlayerAdded:Connect(onPlayerAdded)
while true do
task.wait(1)
end

Lista graczy

Aby wykonać kod dla każdego użytkownika w doświadczeniu, musisz przetworzyć przez masz wolę masz wolę masz wolę masz wolę masz wolę masz wolę masz wolę masz wolę masz wolę masz wolę masz wolę masz wolę masz wolę masz wolę masz wolę masz wolę masz wolę masz wolę masz wolę masz wolę masz wolę masz wolę masz wolę masz wolę masz wolę masz wolę masz w

Materiały są listą przedmiotów przechowywanych w porządku. Każdy przedmiot może być uzyskany poprzez jego pozycję indeksu, zaczynając od 1. Możesz uzyskać długość материаłu poprzez zaprzęgnięcie go # .

  1. Przechowywanie wyniku Players:GetPlayers() w zmiennej playerList.
  2. Utwórz pętlię dla z początkową wartością 1 i końcową wartością #playerList, aby uzyskać jedną witkę pętli dla każdego gracza.

while true do
task.wait(1)
local playerList = Players:GetPlayers()
for currentPlayer = 1, #playerList do
-- Dodaj swoją logikę tutaj dla każdego gracza w grzeLista
end
end

Przyznawanie punktów

Aby przyznać każdemu użytkownikowi w for loop użyj getUserOutOfArray i dodaj 1 do obiektu Punkty przechowywanego w ich leaderstatsOrdynatorze.

Przedmioty przechowywane w matrycy są dostępne za pomocą narożników kwadratowych - na instancjapierwszy element w matrycy playerList można uzyskać za pomocą playerList[1]] . Jeśli napiszesz 2>playerList2> w pętli for, możesz przesunąć się poprzez każdego użytkownika w listy z ka

  1. Przechowywanie użytkownika w playerList[currentPlayer] w zmiennej nazyjącej się player .
  2. Przechowywanie obiektu użytkownika Punkty w zmiennej nazyjącej się points .
  3. Ustaw właściwość Value z points na points.Value + 1.

while true do
task.wait(1)
local playerList = Players:GetPlayers()
for currentPlayer = 1, #playerList do
local player = playerList[currentPlayer]
local points = player.leaderstats.Points
points.Value += 1
end
end

Sprawdź swoją własną doświadczenie i powinieneś zobaczyć, że tabela wyników pokazuje wynik gracza licząc go o 1 za każdą sekundę.

Słuchaj postaci

Celem doświadczenia jest zobaczenie, kto może zostać najdłużej przy życiu, więc użytkownicy, którzy umierają, będą musieli resetować swoje punkty do 0.

Będziesz musiał uzyskać model postaci dla użytkownika, aby wykryć, kiedy umarli. Model ten jest dodawany do doświadczenia po ładowaniu obiektu Player i możesz użyć wydarzenia 2>Class.Player.


local Players = game:GetService("Players")
local function onCharacterAdded(character, player)
end
local function onPlayerAdded(player)
local leaderstats = Instance.new("Folder")

Chociaż włączyłeś użytkownika w parametrach funkcji onCharacterAdded, to rzeczywisty CharacterAdded ewent zwraca tylko postać, a nie związanego użytkownika. Aby przesłać obiekt player również, użyj anonimowej funkcji dla połączenia z ewentem.


local function onPlayerAdded(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local points = Instance.new("IntValue")
points.Name = "Points"
points.Value = 0
points.Parent = leaderstats
player.CharacterAdded:Connect(function(character)
onCharacterAdded(character, player)
end)
end

Resetowanie punktów

Gdy użytkownik umiera, jego Humanoid automatycznie uruchomuje wydarzenie Died. Możesz użyć tego wydarzenia, aby dowiedzieć się, kiedy zresetować jego punkty.

Humanoid znajduje się w modelu postaci, ale zawartość tego modelu zostanie zeskanowana tylko po pojawieniu się użytkownika. Aby uczynić, że twój kod bezpiecznie czeka na wczytywać, użyj funkcji WaitForChild(). Możesz go wezwywać na dowolnym obiekcie rodz


local Players = game:GetService("Players")
local function onCharacterAdded(character, player)
local humanoid = character:WaitForChild("Humanoid")
end

Funkcja, którą musisz połączyć z wydarzeniem Umarł, jest bardzo krótka i będzie tutaj potrzebna tylko do tej pory, więc możesz ponownie użyć anonimowej funkcji.

  1. Połącz nową anonimową funkcję z wydarzeniem Zmarł w kształcie człowieka.
  2. W funkcji anonimowej utwórz zmienne nazyjące się points dla obiektu gracza Punkty .
  3. Ustaw właściwość Value z points na 0 .

local Players = game:GetService("Players")
local function onCharacterAdded(character, player)
local humanoid = character:WaitForChild("Humanoid")
humanoid.Died:Connect(function()
local points = player.leaderstats.Points
points.Value = 0
end)
end

Sprawdź to i zobaczysz wynik użytkownika zresetowany po śmierci.

Sprawdzanie gracza

Jeśli użytkownicy nadal zdobywają punkty, nawet gdy są martwi, to prawie nie w duchu doświadczenia, więc kod musi sprawdzić, czy użytkownik jest żywy, zanim można przyznać punktu.

Musisz zacząć od zdefiniowania trybuj w funkcji onPlayerAdded, która może być używana do sprawdzenia, czy użytkownik jest żywy. W tym momencie użytkownik nie jest jeszcze żywy i wygenerowany, ponieważ ich model postaci nadal musi być dodany.

Atrybuty umożliwiają personalizację obiektów w Roblox za pomocą własnych danych. Atrybut składa się z imienia i wartości. Możesz utworzyć jeden na każdym obiekcie za pomocą funkcji Class.Instance:SetAttribute()|Class.Instance:SetAttribute


local function onPlayerAdded(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local points = Instance.new("IntValue")
points.Name = "Points"
points.Value = 0
points.Parent = leaderstats
player:SetAttribute("IsAlive", false)
player.CharacterAdded:Connect(function(character)
onCharacterAdded(character, player)
end)
end

Gdy model postaci użytkownika zostanie odrodzony, wartość IsAlive musi zostać zmieniona na true, aby użytkownik ponownie mógł zarabiać punkty.

  1. W onCharacterAdded ustaw atrybut IsAlive gracza player na 1> prawdziwy1> .
  2. W onCharacterDied ustaw atrybut IsAlive gracza player na 1>nie1>.

local Players = game:GetService("Players")
local function onCharacterAdded(character, player)
player:SetAttribute("IsAlive", true)
local humanoid = character:WaitForChild("Humanoid")
humanoid.Died:Connect(function()
local points = player.leaderstats.Points
points.Value = 0
player:SetAttribute("IsAlive", false)
end)
end

Na koniec IsAlive powinien być sprawdzony przed każdym punkt przyznawany w while pętli na końcu skryptu. Funkcja 1> Class.Instance:GetAttribute()|Get


while true do
task.wait(1)
local playerList = Players:GetPlayers()
for currentPlayer = 1, #playerList do
local player = playerList[currentPlayer]
if player:GetAttribute("IsAlive") then
local points = player.leaderstats.Points
points.Value += 1
end
end
end

Sprawdź teraz swoją doświadczenie i powinieneś znaleźć, że użytkownik zarabia punkty za każdym sekundą, gdy jest żywy, i pozostaje w 0, gdy nie jest żywy. Zaproś znajomych, aby grały z tobą i zobacz, kto może uzyskać najwyższą wynik.

To jest tylko rozpoczynać: możesz nadal poprawiać swoje doświadczenie dla swoich użytkowników. Oto kilka wskazówek:

  • Umieść kod dla wszystkich platform w jednym skrypcie, co ułatwia aktualizacja.
  • Utwórz obszar lobby, w którym użytkownicy czekają, aby zostać przeniesionymi do obszaru doświadczenia, pozwalając użytkownikom na równoległe uruchomienie.
  • Ogłaszaj zwycięzców każdego rundy.

Kod końcowy


local Players = game:GetService("Players")
local function onCharacterAdded(character, player)
player:SetAttribute("IsAlive", true)
local humanoid = character:WaitForChild("Humanoid")
humanoid.Died:Connect(function()
local points = player.leaderstats.Points
points.Value = 0
player:SetAttribute("IsAlive", false)
end)
end
local function onPlayerAdded(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local points = Instance.new("IntValue")
points.Name = "Points"
points.Value = 0
points.Parent = leaderstats
player:SetAttribute("IsAlive", false)
player.CharacterAdded:Connect(function(character)
onCharacterAdded(character, player)
end)
end
Players.PlayerAdded:Connect(onPlayerAdded)
while true do
task.wait(1)
local playerList = Players:GetPlayers()
for i = 1, #playerList do
local player = playerList[i]
if player:GetAttribute("IsAlive") then
local points = player.leaderstats.Points
points.Value += 1
end
end
end