Else/if Übung zur Punktevergabe

*Dieser Inhalt wurde mit KI (Beta) übersetzt und kann Fehler enthalten. Um diese Seite auf Englisch zu sehen, klicke hier.

Dieses Projekt verwendet bedingte Anweisungen, um ein Teil zu erstellen, das je nach Farbe des Berührungsobjekts Punkte auf einem Bestenliste gibt oder abzieht. Ist es blau, erhält der Spieler ein paar Punkte. Bei grün gibt es viele Punkte. Schließlich, wenn es rot ist, werden Punkte abgezogen.

Projekt einrichten

Das punktgebende Teil kann in jedem Projekt hinzugefügt werden, in dem Punkte relevant sind. Zum Beispiel in einem Abenteuerspiel, in dem Spieler Punkte sammeln.

Punkteverfolgung

Um dieses Projekt einzurichten, benötigst du eine Bestenliste, um die Punkte zu verfolgen, und ein Teil, das die Farben wechselt. Der Code für die Bestenliste wird bereitgestellt.

  1. Erstelle ein neues Skript in ServerScriptService mit dem Namen Leaderboard. Kopiere den folgenden Code in das Skript.


    --Erstelle in ServerScriptService ein Skript mit dem Namen PlayerSetup mit dem Inhalt unten.
    local Players = game:GetService("Players")
    local function onPlayerJoin(player)
    local leaderstats = Instance.new("Folder")
    leaderstats.Name = "leaderstats"
    leaderstats.Parent = player
    -- Beispiel für einen IntValue
    local points = Instance.new("IntValue")
    points.Name = "Points"
    points.Value = 0
    points.Parent = leaderstats
    end
    -- Führe onPlayerJoin aus, wenn das PlayerAdded-Ereignis ausgelöst wird
    Players.PlayerAdded:Connect(onPlayerJoin)

Farbwechselndes Teil

Das Skript wird das Teil durch drei verschiedene Farben zyklen. Jede Farbe hat eine Variable, um ihren RGB-Wert zu speichern, einen Datentyp, der ein Set von drei Zahlen (rot, grün, blau) enthält, die Farben erzeugen.

  1. Erstelle ein Teil mit dem Namen PointPart und einem angehängten Skript mit dem Namen PointScript.

  2. Verwende in PointScript script.Parent, um auf das Teil zuzugreifen.


    local pointPart = script.Parent
  3. Erstelle Variablen, um die verschiedenen Farben zu speichern. Jede Variable sollte auf Color3.fromRGB() gesetzt werden, das einen Farbwert erzeugt.

    • Blau (Einige Punkte): (0, 0, 255)
    • Grün (Viele Punkte): (0, 255, 0)
    • Rot (Punkte verlieren): (255, 0, 0)

    local pointPart = script.Parent
    -- Farben
    local blue = Color3.fromRGB(0, 0, 255)
    local green = Color3.fromRGB(0, 255, 0)
    local red = Color3.fromRGB(255, 0, 0)
  4. Füge Variablen für eine kleine Anzahl an Punkten, eine größere Anzahl an Punkten und eine dritte für den Punktabzug hinzu.


    -- Farben
    local blue = Color3.fromRGB(0, 0, 255)
    local green = Color3.fromRGB(0, 255, 0)
    local red = Color3.fromRGB(255, 0, 0)
    -- Punkten Werte
    local smallPoints = 10
    local largePoints = 50
    local losePoints = 100

Füge den Spielern-Dienst hinzu

Um Punkte zu vergeben, musst du Zugriff auf die Informationen des Spielers erhalten, die im Explorer unter Players gespeichert sind und vom Charakterobjekt getrennt sind. Dort findest du Informationen wie Statistiken der Bestenliste.

Du kannst dies tun, indem du den Players-Dienst zu deinem Skript hinzufügst. Dienste sind zusätzliche Sets von vorgefertigten Funktionen, die von Roblox-Ingenieuren erstellt wurden, um dir Zeit zu sparen.

  1. Hole den Players-Dienst, indem du tippst:

    local Players = game:GetService("Players")


    -- Punkten Werte
    local smallPoints = 10
    local largePoints = 50
    local losePoints = 100
    -- Benötigte Dienste
    local Players = game:GetService("Players")

Funktionen und Ereignisse

PointsScript benötigt zwei Funktionen. Die erste Funktion gibt und zieht Punkte ab. Die zweite Funktion überprüft, ob ein Spieler das Teil berührt hat. Diese Funktionen werden dann mit einem Berührungsereignis verbunden, das jedes Mal ausgeführt wird, wenn das Teil berührt wird.

  1. Erstelle eine neue Funktion namens givePoints() und einen Parameter namens player. Füge innerhalb eine Print-Anweisung hinzu, die für Tests verwendet wird.


    local Players = game:GetService("Players")
    -- Gibt Punkte oder zieht Punkte ab
    local function givePoints(player)
    print("Gebe dem Spieler Punkte")
    end
  2. Darunter erstelle eine zweite Funktion namens partTouched() mit einem Parameter namens otherPart.


    -- Gibt Punkte oder zieht Punkte ab
    local function givePoints(player)
    print("Gebe dem Spieler Punkte")
    end
    -- Überprüft, ob der Spieler das Teil berührt hat
    local function partTouched(otherPart)
    end
  3. Verwende innerhalb der Funktion die Funktion GetPlayerFromCharacter(), um zu überprüfen, ob im otherPart-Variablen ein Spieler vorhanden ist.


    -- Überprüft, ob der Spieler das Teil berührt hat
    local function partTouched(otherPart)
    local player = Players:GetPlayerFromCharacter(otherPart.Parent)
    end
  4. Wenn ein Spieler das Teil berührt hat, wird er in der Spieler-Variable gespeichert. Wenn nicht, bleibt die Variable leer. Auf eigene Faust:

    • Überprüfe innerhalb der Funktion, ob der Spieler einen Wert hat. Wenn ja, rufe givePoints(player) auf.
    • Verbinde unter der Funktion partTouched() mit dem Touched-Ereignis von pointPart.

    -- Überprüft, ob der Spieler das Teil berührt hat
    local function partTouched(otherPart)
    -- Holt den Spieler, wenn einer das Teil berührt hat
    local player = Players:GetPlayerFromCharacter(otherPart.Parent)
    if player then
    givePoints(player)
    end
    end
    pointPart.Touched:Connect(partTouched)
  5. Führe das Projekt aus. Immer wenn ein Spieler das Teil berührt, solltest du eine Nachricht im Ausgabefenster sehen, die sagt: "Gebe dem Spieler Punkte"

Fehlerbehebungstipps:

  • Überprüfe, dass "Players" in game:GetService("Players") großgeschrieben und in Anführungszeichen geschrieben ist.
  • partTouched() sollte mit dem Touched-Ereignis von pointPart verbunden sein.

Erstelle Schleifenfarben

Um die Farben zu durchlaufen, wird das Skript eine While-Schleife verwenden, die alle paar Sekunden die Farbe des Teils ändert. Die Bedingung für diese Schleife wird wahr sein, sodass sie unendlich laufen kann.

  1. Am Ende des Skripts erstelle eine neue While-Schleife, bei der die Bedingung wahr ist, was bedeutet, dass die Schleife immer läuft.


    -- Überprüft, ob der Spieler das Teil berührt hat
    local function partTouched(otherPart)
    -- Holt den Spieler, wenn einer das Teil berührt hat
    local player = Players:GetPlayerFromCharacter(otherPart.Parent)
    if player then
    givePoints(player)
    end
    end
    pointPart.Touched:Connect(partTouched)
    -- Schleift durch die Farben
    while true do
    end
  2. Auf eigene Faust, kodere eine while true do-Schleife, die pointPart auf die Farbspeicher-Variablen setzt, die du erstellt hast. Vergiss nicht, task.wait() zwischen den Farben zu verwenden. Überprüfe nach Abschluss deinen Code anhand der Version unten.


    -- Schleift durch 3 Farben und wartet zwischen jeder Farbe
    while true do
    pointPart.Color = blue
    task.wait(3)
    pointPart.Color = green
    task.wait(2)
    pointPart.Color = red
    task.wait(1)
    end
  3. Teste und überprüfe, ob alle drei Farben ohne Unterbrechung durchlaufen werden.

Fehlerbehebungstipps

An diesem Punkt, falls das Farbenwechseln nicht wie gewünscht funktioniert, versuche Folgendes:

  • Überprüfe, dass sich die while-Schleife am Ende des Skripts befindet, unterhalb des Touched-Ereignisses. Wenn die Schleife nicht am Ende ist, wird sie andere Teile des Skripts am richtigen Ausführen hindern.
  • Überprüfe, dass jede Farbe innerhalb von Color3.fromRGB() korrekt geschrieben ist. Es müssen drei Zahlen zwischen 0 und 255 stehen, die durch Kommas getrennt sind, wie z.B. (255, 50, 0).

Vergib den Spielern Punkte

Spielern werden Punkte basierend auf der aktuellen Farbe des Teils gegeben, wenn sie es berühren.

Finde die aktuelle Farbe

Wann immer ein Spieler das Teil berührt, muss das Skript die aktuelle Farbe des Teils kennen, um später Punkte zu vergeben.

  1. Finde givePoints(). Ersetze deine Testnachricht durch eine Variable für die aktuelle Farbe von pointPart. Diese Variable bestimmt, wie viele Punkte der Spieler erhält (oder verliert).


    local function givePoints(player)
    local currentColor = pointPart.Color
    end
  2. Um die Punkte eines Spielers zu beeinflussen, benötigt diese Funktion Zugriff auf die Bestenliste des Spielers. Erstelle eine Variable, um sie zu speichern.


    local function givePoints(player)
    local currentColor = pointPart.Color
    local playerStats = player:WaitForChild("leaderstats")
    end
  3. Füge jetzt eine Variable hinzu, um den Punktwert des Spielers zu erhalten, der ein Kind ihrer Bestenliste ist.


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

Punkte geben oder abziehen

Als nächstes verwendest du if und elseif, um Punkte zu vergeben oder abzuziehen, abhängig von der Farbe des Teils, wenn es berührt wird. Denk daran, dass blau eine kleine Menge gibt, grün viele gibt und rot Punkte abzieht.

  1. Innerhalb von givePoints(), unterhalb der Variablen, verwende eine if-Anweisung, um zu überprüfen, ob die aktuelle Farbe blau ist und wenn ja, dann füge smallPoints zum aktuellen Punktwert des Spielers hinzu.


    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. Um auf grün zu überprüfen, füge eine else if-Bedingung hinzu. Wenn es grün ist, dann füge die largePoints-Variable zu den Punkten des Spielers hinzu.


    if currentColor == blue then
    playerPoints.Value += smallPoints
    elseif currentColor == green then
    playerPoints.Value += largePoints
    end
  3. Verwende eine else-Anweisung, um Punkte abzuziehen, wenn pointsPart weder blau noch grün ist.


    if currentColor == blue then
    playerPoints.Value += smallPoints
    elseif currentColor == green then
    playerPoints.Value += largePoints
    else
    playerPoints.Value -= losePoints
    end
  4. Zerschlage schließlich das Teil nach der if-Anweisung, sodass das Skript keine Punkte mehr vergeben kann.


    if currentColor == blue then
    playerPoints.Value += smallPoints
    elseif currentColor == green then
    playerPoints.Value += largePoints
    else
    playerPoints.Value -= losePoints
    end
    pointPart:Destroy()
  5. Teste und überprüfe, dass jede Farbe die erwarteten Punkte vergibt. Stelle sicher, dass du alle drei Bedingungen testest.

Geben Sie den Spielern Feedback

Das PointPart funktioniert, aber die Spieler könnten nicht bemerken, dass etwas passiert ist, es sei denn, sie schauen zufällig auf ihre Bestenliste. Behebe dies, indem du Partikel erstellst, wenn das PointPart zerstört wird.

Zusätzliche Rückmeldungen, wenn Spieler ein Teil verwenden, wie Geräusche, Vibrationen oder Partikel, machen die Interaktionen mit Objekten für die Spieler befriedigender.

Erstelle einen Partikeleffekt

Der Partikeleffekt wird die gleiche Farbe wie das Teil haben, wenn es berührt wird. Da die Farben in Variablen gespeichert wurden, ist es einfach, sie wiederzuverwenden.

  1. Erstelle in givePoints() am Ende ein neues ParticleEmitter-Instanz. Stelle sicher, dass der Instanzname genau so geschrieben ist, wie gezeigt.


    local particle = Instance.new("ParticleEmitter")
    end
  2. ParticleEmitters verwenden Farbsequenzen, um ihre Farb-Eigenschaft zu steuern. Erstelle eine neue ColorSequence und übergebe die aktuelle Teilfarbe.


    -- Zerstöre das Teil
    pointPart:Destroy()
    -- Erstelle Partikel
    local particle = Instance.new("ParticleEmitter")
    particle.Color = ColorSequence.new(currentColor)
  3. Das Partikel muss dem Spieler, der es berührt hat, zugewiesen werden. Erstelle eine Variable, um das Charaktermodell des Spielers zu erhalten. Dann, parent das Partikel zum Kopf des Spielers.


    local particle = Instance.new("ParticleEmitter")
    particle.Color = ColorSequence.new(currentColor)
    local playerCharacter = player.Character
    particle.Parent = playerCharacter:WaitForChild("Head")
  4. Verwende task.wait() für eine kurze Sekunde, und zerstöre dann die Partikel.


    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. Teste das Spiel und stelle sicher, dass die Partikel kurz hinter dem Spieler erscheinen, nachdem er jede Farbe berührt hat.

Fehlerbehebungstipps

An diesem Punkt, falls die Partikel nicht wie gewünscht funktionieren, versuche Folgendes:

  • Stelle sicher, dass bei der Erstellung einer neuen Instanz ParticleEmitter genau so geschrieben und in Anführungszeichen gesetzt ist.
  • Beim Parentieren der Partikel stelle sicher, dass du : zwischen playerCharacter und WaitForChild() ohne Leerzeichen verwendest.

Vollständiges PointScript

Eine fertige Version des Skripts kann unten referenziert werden.


local pointPart = script.Parent
--local storage = game:GetService("ServerStorage")
-- Gibt einige Punkte
local blue = Color3.fromRGB(0, 0, 255)
-- Gibt mehr Punkte
local green = Color3.fromRGB(0, 255, 0)
-- Lassen Sie die Spieler Punkte verlieren
local red = Color3.fromRGB(255, 0, 0)
-- gold gibt den Spielern
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")
-- Gibt dem Spieler Gold basierend auf der Farbe des Teils
if currentColor == blue then
playerPoints.Value += smallPoints
elseif currentColor == green then
playerPoints.Value += largePoints
else
playerPoints.Value -= losePoints
end
-- Zerstöre das Teil, warte eine Sekunde, und zerstöre dann das Partikel
pointPart:Destroy()
-- Erstellt einen Funkeneffekt und zerstört ihn
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)
-- Ändert die Farbe des Teils basierend auf Variablen. Muss am Ende des Skripts stehen.
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. Roblox, das Roblox-Logo und "Powering Imagination" gehören zu unseren eingetragenen und nicht eingetragenen Markenzeichen in den USA und anderen Ländern.