Else/If Practice with Giving Points

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

Ten projekt będzie używał warunkowych stwierdzeń, aby stworzyć część, która będzie nadawać lub odejmować punkty na liście wyników w zależności od koloru części, gdy dotyka się. Jeśli jest niebieski, to będzie nadawać graczom kilka punktów. Jeśli jest zielony, to będzie nadawać wiele punktów. W końcu, jeśli jest czerwony, to będzie odejmować punkty.

Ustawienie projektu

Punkt można dodać do dowolnego projektu, w którym punkty są odpowiednie. Na instancja, grę przygodową, w której gracze zbierają punkty.

Śledzenie punktów

Aby skonfigurować ten projekt, będziesz potrzebować tabeli liderów, aby śledzić punkty i część, która zmienia kolor. Kod dla tabeli liderów zostanie podany.

  1. Utwórz nowy skrypt w ServerScriptService nazyającym się Leaderboard. Kopiuj i wklej kod poniżej do skryptu.


    --W ServerScriptService utwórz skrypt o nazwie PlayerSetup z zawartością poniżej.
    local Players = game:GetService("Players")
    local function onPlayerJoin(player)
    local leaderstats = Instance.new("Folder")
    leaderstats.Name = "leaderstats"
    leaderstats.Parent = player
    -- Przykład IntValue
    local points = Instance.new("IntValue")
    points.Name = "Points"
    points.Value = 0
    points.Parent = leaderstats
    end
    -- Biegnij naPlayerJoin, gdy wydarzenie PlayerAdded zostanie uruchomione
    Players.PlayerAdded:Connect(onPlayerJoin)

Zmieniający się kolor części

Skrypt będzie przetwarzać trzy różne kolory dla części. Każdy kolor będzie miał zmienne, aby przechować wartość RGB, typ danych, który zawiera zestaw trzech liczb (czerwony, zielony, niebieski), które tworzą kolory.

  1. Utwórz część o nazwie PointPart z załączonym skryptem nazyającym się PointScript.

  2. W PointScript użyj script.Parent, aby odnieść się do części.


    local pointPart = script.Parent
  3. Utwórz zmienne, aby przechować różne kolory. Każda zmiana powinna być ustawiona na Color3.fromRGB(), co tworzy wartość koloru.

    • Niebieski (Niektóre Punkty): (0, 0, 255)
    • Zielony (Wiele punktów): (0, 255, 0)
    • Czerwony (Zdobądź Punkty): (255, 0, 0)

    local pointPart = script.Parent
    -- Kolory
    local blue = Color3.fromRGB(0, 0, 255)
    local green = Color3.fromRGB(0, 255, 0)
    local red = Color3.fromRGB(255, 0, 0)
  4. Dodaj zmienne dla małej ilości punktów, większej ilości punktów i trzeciego do usuwania punktów.


    -- Kolory
    local blue = Color3.fromRGB(0, 0, 255)
    local green = Color3.fromRGB(0, 255, 0)
    local red = Color3.fromRGB(255, 0, 0)
    -- Wartości punktów
    local smallPoints = 10
    local largePoints = 50
    local losePoints = 100

Dodanie usługi graczy

Aby przyznać punkty, będziesz musiał uzyskać dostęp do informacji gracza, które są przechowywane w Explorerze pod graczami, a są oddzielone od obiektu postaci. To jest miejsce, w którym można znaleźć takie informacje jak statystyki liderboardu.

Możesz to zrobić, dodając graczy usługę do swojego skryptu. usługi są dodatkowymi zestawami uprzednio zbudowanych funkcji Roblox, aby zyskać czas.

  1. Uzyskaj usługę Gracze poprzez wpisanie:

    local Players = game:GetService("Players")


    -- Wartości punktów
    local smallPoints = 10
    local largePoints = 50
    local losePoints = 100
    -- Potrzebne usługi
    local Players = game:GetService("Players")

Funkcje i wydarzenia

PointsScript będzie potrzebował dwóch funkcji. Pierwsza funkcja będzie podawać i odejmować części. Druga funkcja sprawdzi, czy gracz dotknął części. Te funkcje zostaną następnie połączone z wydarzeniem dotyku, które zostanie uruchomione za każdym razem, gdy dotyka się części.

  1. Utwórz nową funkcję nazwaną givePoints() i parametr nazyający się player. Wewnątrz, dodaj stwierdzenie drukowania do użycia do testowania.


    local Players = game:GetService("Players")
    -- Dodaje lub odejmuje punkty
    local function givePoints(player)
    print("Giving player points")
    end
  2. Pod tym stwórz drugą funkcję nazwaną partTouched() z parametrem nazwanym otherPart.


    -- Dodaje lub odejmuje punkty
    local function givePoints(player)
    print("Giving player points")
    end
    -- Sprawdza, czy gracz dotknął części
    local function partTouched(otherPart)
    end
  3. Wewnątrz funkcji użyj funkcji GetPlayerFromCharacter() , aby sprawdzić, czy istnieje gracz w zmiennej innej części.


    -- Sprawdza, czy gracz dotknął części
    local function partTouched(otherPart)
    local player = Players:GetPlayerFromCharacter(otherPart.Parent)
    end
  4. Jeśli gracz dotknął części, zostanie ona zapisana w zmiennej gracza. Jeśli nie, zmienne pozostanie puste. posiadać:

    • Wewnątrz funkcji sprawdź, czy gracz ma wartość. Jeśli tak, to zadzwoń givePoints(player).
    • Poniżej funkcji połącz partTouched() z wydarzeniem dotykanym pointPart .

    -- Sprawdza, czy gracz dotknął części
    local function partTouched(otherPart)
    -- Dostaje gracz, jeśli dotknie części
    local player = Players:GetPlayerFromCharacter(otherPart.Parent)
    if player then
    givePoints(player)
    end
    end
    pointPart.Touched:Connect(partTouched)
  5. Zacznij projektu. Kiedy gracz dotyka części, powinieneś zobaczyć wiadomość w oknie wyjścia mówiącą: „Giving player points” Wskazówki dotyczące rozwiązywania problemów:

  • Sprawdź, że "Players" w game:GetService("Players") jest zaznaczony i w cudzłapach.
  • partTouched() powinien być połączony z wydarzeniem punktu Touched .

Utwórz Kolory Loopingu

Aby przetwarzać kolory, skrypt użyje czasu = pętla, który zmienia kolor części co kilka sekund. Warunek dla tej pętli będzie prawdziwy, więc można go uruchomić w nieskończoność.

  1. Na końcu skryptu utwórz nowy while loop, gdzie kondycja jest prawdziwa, co oznacza, że ​​ loop zawsze biegnie.


    -- Sprawdza, czy gracz dotknął części
    local function partTouched(otherPart)
    -- Dostaje gracz, jeśli dotknie części
    local player = Players:GetPlayerFromCharacter(otherPart.Parent)
    if player then
    givePoints(player)
    end
    end
    pointPart.Touched:Connect(partTouched)
    -- Pętli poprzez kolory
    while true do
    end
  2. posiadać, koduj przez jakiś czas prawdziwy do pętli, która zmienia punktPart na kolorowe zmienne, które stworzyłeś. Nie zapomnij użyć task.wait() pomiędzy kolorami. Po zakończeniu sprawdź swój kod w wersji poniżej.


    -- Pętla przez 3 kolory, czekając między każdym kolorem
    while true do
    pointPart.Color = blue
    task.wait(3)
    pointPart.Color = green
    task.wait(2)
    pointPart.Color = red
    task.wait(1)
    end
  3. Zagraj-test i sprawdź, że wszystkie trzy kolory pętli bez przerwy.

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

W tym momencie, jeśli pętla kolorowa nie działa tak, jak powinna, spróbuj jednej z poniższych opcji.

  • Sprawdź, czy pętla jest na dole dołu skryptu, poniżej wydarzenia dotkniętego. Jeśli pętla nie jest na dole, to będzie uniemożliwiać inne części skryptu prawidłowo działają.
  • Sprawdź, że każdy kolor w Color3.fromRGB() jest poprawnie napisany. Powinno być trzech liczb pomiędzy 0 i 255 oddzielonych przez przecinki, jak (255, 50, 0) .

Dawanie graczom punktów

Graczom będą przyznawane punkty w zależności od koloru części, gdy dotkną jej.

Znalezienie aktualnego koloru

Zawsze, gdy gracz dotyka części, skrypt będzie musiał znać aktualny kolor części, aby później przyznać punkty.

  1. Znajdź givePoints() . Zastąp swoją wiadomość testową zmiennem dla obecnego koloru pointPart. Ta zmiana będzie określać, ile punktów gracz otrzymuje (lub traci).


    local function givePoints(player)
    local currentColor = pointPart.Color
    end
  2. Aby wpływać na punkty gracza, ta funkcja wymaga dostępu do rankinggracza. Utwórz zmienne, aby go zapisać.


    local function givePoints(player)
    local currentColor = pointPart.Color
    local playerStats = player:WaitForChild("leaderstats")
    end
  3. Teraz dodaj zmienne, aby uzyskać wartość punktów gracza, która jest dzieckiem ich tablicy ranking.


    local function givePoints(player)
    local currentColor = pointPart.Color
    local playerStats = player:WaitForChild("leaderstats")
    local playerPoints = playerStats:WaitForChild("Points")
    end

Dawanie lub odejmowanie punktów

Następnie użyjesz if i elif, aby dać lub odebrać punkty w zależności od koloru części, gdy dotyknięta. Pamiętaj, że niebieski dostarcza niewielką ilość, zielony dostarcza wiele, a czerwony odejmuje punkty.

  1. Wewnątrz givePoints() , poniżej zmiennej, użyj oświadczenia if, aby sprawdzić, czy obecny kolor jest niebieski i jeśli tak, to dodaj smallPoints do wartości punktów gracza.


    local function givePoints(player)
    local currentColor = pointPart.Color
    local playerStats = player:WaitForChild("leaderstats")
    local playerPoints = playerStats:WaitForChild("Points")
    if currentColor == blue then
    playerPoints.Value += smallPoints
    end
    end
  2. Aby sprawdzić zielony, dodaj inny if condition. Jeśli zielony, to dodaj zmienne largePoints do punktów gracza.


    if currentColor == blue then
    playerPoints.Value += smallPoints
    elseif currentColor == green then
    playerPoints.Value += largePoints
    end
  3. Użyj innego oświadczenia, aby odebrać punkty, jeśli część była niebieska lub zielona.


    if currentColor == blue then
    playerPoints.Value += smallPoints
    elseif currentColor == green then
    playerPoints.Value += largePoints
    else
    playerPoints.Value -= losePoints
    end
  4. Wreszcie, zniszcz część po jej if, aby skrypt nie mógł dalej rozdawać punktów.


    if currentColor == blue then
    playerPoints.Value += smallPoints
    elseif currentColor == green then
    playerPoints.Value += largePoints
    else
    playerPoints.Value -= losePoints
    end
    pointPart:Destroy()
  5. Sprawdź, czy każdy kolor daje punkti, jak oczekiwano. Upewnij się, że wszystkie trzy warunki testu są testowane.

Dawanie graczom zwrotów

PointPart działa, ale gracze mogą nie zauważyć, że coś się stało, chyba że zostali przyciągnięci do swojego wyniku lub statystyki. Napraw to, tworząc cząsteczki, gdy PointPart zostanie zniszczony.

Dodawanie opinii, gdy gracze używają części, takich jak dźwięk, wibracje lub cząsteczki, sprawia, że interakcje z obiektami są bardziej satysfakcjonujące dla graczy.

Tworzenie efektu cząsteczki

Efekt cząsteczek będzie taki sam jak kolor części, gdy dotyknięto. Ponieważ kolory były zapisywane w zmienne, łatwo je ponownie użyć.

  1. W givePoints() w dolnej części stwórz nową instancję Emitera Particulek . Upewnij się, że nazwa instancji jest poprawnie wymieniana.


    local particle = Instance.new("ParticleEmitter")
    end
  2. Generatory cząsteczek używają sekwencji kolorów, aby kontrolować ich właściwość koloru. Utwórz nową sekwencję kolorów i przekaż bieżący kolor części.


    -- Zniszcz część
    pointPart:Destroy()
    -- Tworzenie cząsteczek
    local particle = Instance.new("ParticleEmitter")
    particle.Color = ColorSequence.new(currentColor)
  3. Cząsteczka będzie musiała być związana z graczem, który ją dotknął. Stwórz zmienne, aby uzyskać model postaci gracza. Następnie zwiąż zmienne z głową gracza.


    local particle = Instance.new("ParticleEmitter")
    particle.Color = ColorSequence.new(currentColor)
    local playerCharacter = player.Character
    particle.Parent = playerCharacter:WaitForChild("Head")
  4. Użyj task.wait() na szybki sekund, a następnie zniszcz cząsteczki.


    local particle = Instance.new("ParticleEmitter")
    particle.Color = ColorSequence.new(currentColor)
    local playerCharacter = player.Character
    particle.Parent = playerCharacter:WaitForChild("Head")
    task.wait(1)
    particle:Destroy()
  5. Sprawdź grę i upewnij się, że cząsteczki krótko podążają za graczem po dotknięciu każdego koloru.

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

W tym momencie, jeśli cząsteczki nie działają tak, jak powinny, spróbuj jednej z poniższych opcji.

  • Zrób to podczas tworzenia nowej instancji, że ParticleEmitter jest zapisany Dokładnie jak pokazano i wewnątrz cytatów.
  • Podczas rodzicielstwa cząsteczek upewnij się, że używasz :``playerCharacter i WaitForChild() bez przecinków.

Ukończ PointScript

Ukończona wersja skryptu może być odniesiona poniżej.


local pointPart = script.Parent
--lokalne przechowywanie = gra:GetService("ServerStorage")
-- Daje kilka punktów
local blue = Color3.fromRGB(0, 0, 255)
-- Daje więcej punktów
local green = Color3.fromRGB(0, 255, 0)
-- Zdenerwuje graczy
local red = Color3.fromRGB(255, 0, 0)
-- złoto dla graczy
local smallPoints = 10
local largePoints = 50
local losePoints = 100
local Players = game:GetService("Players")
local function givePoints(player)
local currentColor = pointPart.Color
local playerStats = player:WaitForChild("leaderstats")
local playerPoints = playerStats:WaitForChild("Points")
-- Daje graczom złoto w zależności od koloru części
if currentColor == blue then
playerPoints.Value += smallPoints
elseif currentColor == green then
playerPoints.Value += largePoints
else
playerPoints.Value -= losePoints
end
-- Zniszcz część, poczekaj sekundę i zniszcz cząstkę
pointPart:Destroy()
-- Tworzy efekt błysku i go niszczy
local playerCharacter = player.Character
local particle = Instance.new("ParticleEmitter")
particle.Color = ColorSequence.new(currentColor)
particle.Parent = playerCharacter:WaitForChild("Head")
task.wait(1)
particle:Destroy()
end
local function partTouched(otherPart)
local player = Players:GetPlayerFromCharacter(otherPart.Parent)
if player then
givePoints(player)
end
end
pointPart.Touched:Connect(partTouched)
-- Zmienia kolor części w zależności od zmiennej. Musi być na dole skryptu.
while true do
pointPart.Color = blue
task.wait(4)
pointPart.Color = green
task.wait(3)
pointPart.Color = red
task.wait(2)
end