Praktyka użycia Else/if przy przyznawaniu punktó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.

Ten projekt wykorzysta instrukcje warunkowe do stworzenia elementu, który przyzna lub odejmie punkty na tablicy liderów w zależności od koloru elementu, gdy zostanie dotknięty. Jeśli kolor jest niebieski, przyzna graczom kilka punktów. Jeśli zielony, przyzna dużo punktów. Na koniec, jeśli czerwony, odejmie punkty.

Ustaw projekt

Element przyznający punkty można dodać do każdego projektu, w którym punkty mają znaczenie. Na przykład, w grze przygodowej, w której gracze zbierają punkty.

Śledzenie punktów

Aby skonfigurować ten projekt, potrzebujesz tablicy liderów do śledzenia punktów oraz elementu, który zmienia kolory. Kod dla tablicy liderów zostanie dostarczony.

  1. Utwórz nowy skrypt w ServerScriptService o nazwie Leaderboard. Skopiuj i wklej poniższy kod do skryptu.


    --W ServerScriptService, utwórz skrypt o nazwie PlayerSetup z poniższą zawartością.
    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
    -- Uruchom onPlayerJoin, gdy zdarzenie PlayerAdded zostanie wywołane
    Players.PlayerAdded:Connect(onPlayerJoin)

Element zmieniający kolor

Skrypt będzie cyklicznie zmieniać trzy różne kolory dla elementu. Każdy kolor będzie miał zmienną do przechowywania swojej wartości RGB, typu danych, który zawiera zestaw trzech liczb (czerwony, zielony, niebieski), które tworzą kolory.

  1. Utwórz element o nazwie PointPart z dołączonym skryptem o nazwie PointScript.

  2. W PointScript użyj script.Parent, aby odwołać się do elementu.


    local pointPart = script.Parent
  3. Utwórz zmienne do przechowywania różnych kolorów. Każda zmienna powinna być ustawiona na Color3.fromRGB(), co tworzy wartość koloru.

    • Niebieski (Kilka punktów): (0, 0, 255)
    • Zielony (Wiele punktów): (0, 255, 0)
    • Czerwony (Utrata punktów): (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 trzeciej dla odejmowania 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

Dodaj usługę graczy

Aby przyznać punkty, będziesz musiał uzyskać dostęp do informacji o graczu, które są przechowywane w Explorerze pod Players, i są oddzielne od obiektu postaci. To tutaj można znaleźć informacje, takie jak statystyki tablicy liderów.

Możesz to zrobić, dodając usługę Players do swojego skryptu. Usługi to dodatkowe zestawy wstępnie zbudowanych funkcji stworzonych przez inżynierów Roblox, aby zaoszczędzić Twój czas.

  1. Uzyskaj usługę Players, wpisując:

    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 zdarzenia

Skrypt PointsScript będzie potrzebować dwóch funkcji. Pierwsza funkcja będzie przyznawać i odejmować punkty. Druga funkcja będzie sprawdzać, czy gracz dotknął elementu. Te funkcje zostaną następnie połączone ze zdarzeniem dotyku, które działa, gdy ten element jest dotykany.

  1. Utwórz nową funkcję o nazwie givePoints() oraz parametr o nazwie player. Wewnątrz dodaj instrukcję print do użycia w testach.


    local Players = game:GetService("Players")
    -- Przyznaje lub odejmuje punkty
    local function givePoints(player)
    print("Przyznawanie punktów graczowi")
    end
  2. Poniżej tego stwórz drugą funkcję o nazwie partTouched() z parametrem o nazwie otherPart.


    -- Przyznaje lub odejmuje punkty
    local function givePoints(player)
    print("Przyznawanie punktów graczowi")
    end
    -- Sprawdza, czy gracz dotknął elementu
    local function partTouched(otherPart)
    end
  3. Wewnątrz funkcji użyj funkcji GetPlayerFromCharacter(), aby sprawdzić, czy w zmiennej otherPart jest gracz.


    -- Sprawdza, czy gracz dotknął elementu
    local function partTouched(otherPart)
    local player = Players:GetPlayerFromCharacter(otherPart.Parent)
    end
  4. Jeśli gracz dotknął elementu, zostanie on przechowany w zmiennej player. Jeśli nie, zmienna pozostanie pusta. Na własną rękę:

    • W funkcji sprawdź, czy player ma wartość. Jeśli tak, to wywołaj givePoints(player).
    • Pod funkcją połącz partTouched() ze zdarzeniem Touched elementu pointPart.

    -- Sprawdza, czy gracz dotknął elementu
    local function partTouched(otherPart)
    -- Uzyskuje gracza, jeśli dotknął elementu
    local player = Players:GetPlayerFromCharacter(otherPart.Parent)
    if player then
    givePoints(player)
    end
    end
    pointPart.Touched:Connect(partTouched)
  5. Uruchom projekt. Kiedy gracz dotknie elementu, powinieneś zobaczyć komunikat w oknie wyjścia mówiący: "Przyznawanie punktów graczowi"

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

  • Sprawdź, czy "Players" w game:GetService("Players") jest napisane wielką literą i w cudzysłowie.
  • partTouched() powinno być połączone ze zdarzeniem Touched elementu pointPart.

Stwórz Zmienność Kolorów

Aby cyklicznie przechodzić przez kolory, skrypt użyje pętli while, która zmienia kolor elementu co kilka sekund. Warunek dla tej pętli będzie prawdziwy, co oznacza, że może działać w nieskończoność.

  1. Na końcu skryptu utwórz nową pętlę while, w której warunek jest prawdziwy, co oznacza, że pętla zawsze działa.


    -- Sprawdza, czy gracz dotknął elementu
    local function partTouched(otherPart)
    -- Uzyskuje gracza, jeśli dotknął elementu
    local player = Players:GetPlayerFromCharacter(otherPart.Parent)
    if player then
    givePoints(player)
    end
    end
    pointPart.Touched:Connect(partTouched)
    -- Zmienia kolory
    while true do
    end
  2. Na własną rękę, zapisz pętlę while true do, która zmienia kolor pointPart na utworzone zmienne kolorów. Nie zapomnij użyć task.wait() między kolorami. Po zakończeniu, sprawdź swój kod z wersją poniżej.


    -- Zmienia kolory 3 razy, 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. Testuj i sprawdź, czy wszystkie trzy kolory zmieniają się bez zatrzymywania.

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

Na tym etapie, jeśli pętla kolorów nie działa tak, jak powinna, spróbuj jednego z poniższych rozwiązań.

  • Sprawdź, czy pętla while jest na dole skryptu, poniżej zdarzenia Touched. Jeśli pętla nie jest na dole, nie pozwoli innym częściom skryptu działać prawidłowo.
  • Sprawdź, czy każdy kolor wewnątrz Color3.fromRGB() jest poprawnie zapisany. Musi być trzy liczby między 0 a 255 oddzielone przecinkami, np. (255, 50, 0).

Przyznawanie punktów graczom

Gracze będą otrzymywać punkty w zależności od aktualnego koloru elementu, gdy go dotkną.

Znajdź aktualny kolor

Kiedy gracz dotknie elementu, skrypt musi wiedzieć, jaki jest aktualny kolor elementu, aby później przyznać punkty.

  1. Zlokalizuj givePoints(). Zastąp swój testowy komunikat zmienną dla aktualnego koloru pointPart. Ta zmienna określi, ile punktów gracz otrzymuje (lub traci).


    lokalna funkcja givePoints(player)
    local currentColor = pointPart.Color
    end
  2. Aby wpłynąć na punkty gracza, ta funkcja potrzebuje dostępu do tablicy liderów gracza. Utwórz zmienną do jej przechowywania.


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


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

Przyznawanie lub odejmowanie punktów

Następnie użyjesz if i elseif, aby przyznać lub odejmować punkty w zależności od koloru elementu, gdy zostanie dotknięty. Pamiętaj, że niebieski przyznaje małą ilość punktów, zielony przyznaje wiele, a czerwony odejmuje punkty.

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


    lokalna funkcja 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ć kolor zielony, dodaj warunek else if. Jeśli zielony, dodaj zmienną largePoints do punktów gracza.


    if currentColor == blue then
    playerPoints.Value += smallPoints
    elseif currentColor == green then
    playerPoints.Value += largePoints
    end
  3. Użyj instrukcji else, aby odjąć punkty, jeśli pointPart nie był ani niebieski, ani zielony.


    if currentColor == blue then
    playerPoints.Value += smallPoints
    elseif currentColor == green then
    playerPoints.Value += largePoints
    else
    playerPoints.Value -= losePoints
    end
  4. Na koniec, zniszcz element po instrukcji if, aby skrypt nie mógł dalej przyznawać punktów.


    if currentColor == blue then
    playerPoints.Value += smallPoints
    elseif currentColor == green then
    playerPoints.Value += largePoints
    else
    playerPoints.Value -= losePoints
    end
    pointPart:Destroy()
  5. Testuj i sprawdź, czy każdy kolor przyznaje punkty zgodnie z oczekiwaniami. Upewnij się, że przetestujesz wszystkie trzy warunki.

Przyznawanie graczom informacji zwrotnej

PointPart działa, ale gracze mogą nie zauważać, że coś się wydarzyło, chyba że akurat patrzą na swoją tablicę liderów. Napraw to, tworząc cząsteczki, gdy PointPart zostanie zniszczony.

Dodanie informacji zwrotnej, gdy gracze korzystają z elementu, takich jak dźwięki, drżenia czy cząsteczki, sprawia, że interakcje z przedmiotami są bardziej satysfakcjonujące dla graczy.

Utwórz efekt cząsteczek

Efekt cząsteczek będzie miał ten sam kolor, co element, gdy zostanie dotknięty. Ponieważ kolory były przechowywane w zmiennych, łatwo jest je ponownie wykorzystać.

  1. W givePoints() na dole, utwórz nową instancję ParticleEmitter. Upewnij się, że nazwa instancji jest napisana dokładnie tak, jak pokazano.


    local particle = Instance.new("ParticleEmitter")
    end
  2. ParticleEmitters używają sekwencji kolorów do sterowania swoją właściwością Kolor. Stwórz nową ColorSequence i przekaż aktualny kolor elementu.


    -- Zniszcz element
    pointPart:Destroy()
    -- Tworzy cząsteczki
    local particle = Instance.new("ParticleEmitter")
    particle.Color = ColorSequence.new(currentColor)
  3. Cząsteczka musi być przypisana do gracza, który ją dotknął. Utwórz zmienną, aby uzyskać model postaci gracza. Następnie przypisz cząsteczkę do głowy 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(), aby poczekać szybko przez 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. Testuj grę i upewnij się, że cząsteczki na krótko podążają za graczem po dotknięciu każdego koloru.

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

Na tym etapie, jeśli cząsteczki nie działają tak, jak powinny, spróbuj jednego z poniższych rozwiązań.

  • Upewnij się, że przy tworzeniu nowej instancji ParticleEmitter jest napisane dokładnie tak, jak pokazano i w cudzysłowie.
  • Kiedy przypisujesz cząsteczki, upewnij się, że używasz : między playerCharacter i WaitForChild(), bez spacji między.

Pełny skrypt PointScript

Zakończoną wersję skryptu można znaleźć poniżej.


local pointPart = script.Parent
--local storage = game:GetService("ServerStorage")
-- Przyznaje pewne punkty
local blue = Color3.fromRGB(0, 0, 255)
-- Przyznaje więcej punktów
local green = Color3.fromRGB(0, 255, 0)
-- Utrata punktów dla graczy
local red = Color3.fromRGB(255, 0, 0)
-- przyznawane punkty graczom
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")
-- Przyznaje punkty graczowi w zależności od koloru elementu
if currentColor == blue then
playerPoints.Value += smallPoints
elseif currentColor == green then
playerPoints.Value += largePoints
else
playerPoints.Value -= losePoints
end
-- Zniszcz element, poczekaj chwilę, a następnie zniszcz cząsteczki
pointPart:Destroy()
-- Tworzy efekt cząsteczek 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 elementu na podstawie zmiennych. Musi być na końcu skryptu.
while true do
pointPart.Color = blue
task.wait(4)
pointPart.Color = green
task.wait(3)
pointPart.Color = red
task.wait(2)
end
©2026 Roblox Corporation. Nazwa Roblox, logo Roblox oraz hasło „Powering Imagination” należą do naszych zarejestrowanych i niezarejestrowanych znaków towarowych na terenie Stanów Zjednoczonych oraz w innych krajach.