Andere/Wenn Übung mit Punkten gegeben wird

*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 Punkte auf einer Bestenliste basierend auf der Farbe des Teils, wenn er berührt wird. Wenn blau, dann wird den Spielern einige Punkte geben. Wenn grün, dann wird viel Punkte geben. Schließlich, wenn rot, wird die Punkte wegnehmen.

Das Projekt einrichten

Der Punkt, der Teil, kann in jedes Projekt hinzugefügt werden, in dem Punkte relevant sind. Zum Instanzein Abenteuerspiel, in dem Spieler Punkte sammeln.

Punkt-Verfolgung

Um dieses Projekt aufzustellen, benötigen Sie eine Bestenliste, um die Punkte zu verfolgen, und ein Teil, das Farben ändert. Der Code für die Bestenliste wird bereitgestellt.

  1. Erstellen Sie ein neues Skript in ServerScriptService mit dem Namen Leaderboard. Kopieren Sie und fügen Sie den Code unten in das Skript, das. PL: die Skriptsein.


    --In ServerScriptService erstellen Sie ein Skript namens PlayerSetup mit den folgenden Inhalten.
    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
    -- Laufen Sie aufPlayerJoin aus, wenn das Ereignis PlayerAdded ausgelöst wird
    Players.PlayerAdded:Connect(onPlayerJoin)

Farbwechselndes Teil

Das Skript wird durch drei verschiedene Farben für das Teil durchlaufen. Jede Farbe wird eine Variable haben, um ihren RGB-Wert zu speichern, einen Datentyp, der ein Set von drei Zahlen (Rot, Grün, Blau) enthält, die Farben erstellen.

  1. Erstellen Sie ein Teil mit dem Namen PointPart mit einem beigefügten Skript namens PointScript.

  2. In PointScript verwenden Sie script.Parent, um auf das Teil zu verweisen.


    local pointPart = script.Parent
  3. Erstellen Sie Variablen, um die verschiedenen Farben zu speichern. Jede Variable sollte auf Color3.fromRGB() eingestellt sein, was einen Farbwert erstellt.

    • 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 von Punkten, eine größere Anzahl von Punkten und einen Dritt für das Entfernen von Punkten hinzu.


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

Player-Service hinzufügen

Um Punkte zu vergeben, musst du Zugriff auf die Informationen des Spieler:inerhalten, die in der Explorer unter den Spielern gespeichert ist, und die von dem Charakter-Objekt getrennt ist. Dies ist der Ort, an dem Informationen wie Bestenlistenstatistiken gefunden werden können.

Du kannst dies tun, indem du den Players -Dienst zu deinem Skript, das. PL: die Skriptshinzufügst. Services sind zusätzliche vordefinierte Funktionen, die von Roblox-Ingenieuren erstellt wurden, um dir Zeit zu sparen.

  1. Erhalten Sie den Players Service, indem Sie tippen:

    local Players = game:GetService("Players")


    -- Punkte-werte
    local smallPoints = 10
    local largePoints = 50
    local losePoints = 100
    -- Dienste erforderlich
    local Players = game:GetService("Players")

Funktionen und Ereignisse

PointsScript wird zwei Funktionen benötigen. Die erste Funktion wird Teile geben und subtrahieren. Die zweite Funktion wird überprüfen, ob ein Spieler die Teile berührt hat. Diese Funktionen werden dann mit einem Berührungsevent verbunden, das immer ausgeführt wird, wenn dieser Teil berührt wird.

  1. Erstellen Sie eine neue Funktion namens givePoints() und ein Parameter namens player . Dans, addieren Sie ein Print- Statement, um es für das Testen zu verwenden.


    local Players = game:GetService("Players")
    -- Gibt oder subtrahiert Punkte
    local function givePoints(player)
    print("Giving player points")
    end
  2. Unter dem erstellen Sie eine zweite Funktion namens partTouched() mit einem Parameter namens otherPart .


    -- Gibt oder subtrahiert Punkte
    local function givePoints(player)
    print("Giving player points")
    end
    -- Überprüft, ob der Spieler das Teil berührt hat
    local function partTouched(otherPart)
    end
  3. In der Funktion verwenden Sie die Funktion GetPlayerFromCharacter() , um zu überprüfen, ob es einen Spieler in der anderen Teil variablen gibt.


    -- Ü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, wird es in der Variable des Spielers gespeichert. Wenn nicht, bleibt die Variable leer. Auf deinem besitzen:

    • In der Funktion überprüfen Sie, ob der Spieler einen Wert hat. Wenn ja, dann rufen Sie givePoints(player) auf.
    • Unter der Funktion, verbinden Sie partTouched() mit dem Ereignis Touched von pointPart .

    -- Überprüft, ob der Spieler das Teil berührt hat
    local function partTouched(otherPart)
    -- Bekommt den Spieler, wenn einer das Teil berührt
    local player = Players:GetPlayerFromCharacter(otherPart.Parent)
    if player then
    givePoints(player)
    end
    end
    pointPart.Touched:Connect(partTouched)
  5. Run das Projekt. Wenn ein Spieler die Teile berührt, solltest du eine Nachricht im Ausgabe-Fenster sehen, die sagt: "Giving player points" Tipps zum Fehler-Schießen:

  • Überprüfen Sie, dass "Players" in game:GetService("Players") mit Großbuchstaben und in Klammern geschrieben ist.
  • partTouched() sollte mit dem Ereignis Touched von pointPart verbunden sein.

Looping-Farben erstellen

Um durch Farben zu durchlaufen, verwendet das Skript eine while = Loop , die die Farbe des Teils alle paar Sekunden ändert. Die Bedingung für diese Loop wird wahr sein, so dass es unbegrenzt ausgeführt werden kann.

  1. Am Ende des Skripts erstellen Sie einen neuen While-Loop, in dem die Bedingung wahr ist, was bedeutet, dass der Loop immer ausgeführt wird.


    -- Überprüft, ob der Spieler das Teil berührt hat
    local function partTouched(otherPart)
    -- Bekommt den Spieler, wenn einer das Teil berührt
    local player = Players:GetPlayerFromCharacter(otherPart.Parent)
    if player then
    givePoints(player)
    end
    end
    pointPart.Touched:Connect(partTouched)
    -- Loop durch Farben
    while true do
    end
  2. besitzen, code ein while true do loop, das verändert PunktTeil in die Farb变수, die du erstellt hast. Vergiss nicht, task.wait() zwischen Farben zu verwenden. Wenn du fertig bist, überprüfe deinen Code gegen die Version unten.


    -- Loop durch 3 Farben, zwischen jedem Farben warten
    while true do
    pointPart.Color = blue
    task.wait(3)
    pointPart.Color = green
    task.wait(2)
    pointPart.Color = red
    task.wait(1)
    end
  3. Spiel-Test und überprüfen Sie, dass alle drei Farben ohne Unterbrechung in der Schleife sind.

Troubleshooting-Tipps

Wenn sich die Farb-Looping nicht wie erwartet funktioniert, versuchen Sie einen der folgenden Optionen unten.

  • Überprüfen Sie, dass der While-Loop am unteren Rand des Skript, das. PL: die Skriptsнаходится, unter dem Touched-Ereignis. Wenn der Loop nicht am unteren Rand ist, wird die andere Teile des Skripts nicht richtig ausgeführt.
  • Überprüfen Sie, dass jeder Farbe innerhalb von Color3.fromRGB() korrekt geschrieben ist. Es muss drei Zahlen zwischen 0 und 255 geben, die durch Kommas getrennt sind, wie (255, 50, 0) .

Spielern Punkte geben

Spieler erhalten Punkte basierend auf der aktuellen Farbe des Teils, wenn sie ihn berühren.

Die aktuelle Farbe finden

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

  1. Finden Sie givePoints() . Ersetzen Sie Ihre Testnachricht durch eine Variable für die aktuelle Farbe von pointPart. Diese Variable wird bestimmen, wie viele Punkte der Spieler erhält (oder verliert).


    local function givePoints(player)
    local currentColor = pointPart.Color
    end
  2. Um die Punkte eines Spieler:inzu beeinflussen, braucht diese Funktion Zugriff auf die Bestenlistedes Spieler:in. Erstellen Sie eine Variable, um sie zu speichern.


    local function givePoints(player)
    local currentColor = pointPart.Color
    local playerStats = player:WaitForChild("leaderstats")
    end
  3. Fügen Sie jetzt eine Variable hinzu, um den Wert der Punkte des Spieler:inzu erhalten, der ein Kind seiner 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

Danach verwendest du if und elif, um Punkte je nach Farbe des Teils hinzuzufügen oder abzuziehen. Denke daran, dass Blau eine kleine Menge, Grün viele und Rot Punkte abzieht.

  1. In givePoints() , unter den Variablen, verwenden Sie ein If-Anweisung, um zu überprüfen, ob die aktuelle Farbe blau ist, und wenn ja, dann fügen Sie smallPoints dem aktuellen Punktewert des Spieler:inhinzu.


    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 nach grün zu überprüfen, füge einen else if condition hinzu. Wenn grün, dann füge die largePoints Variable zu den Punkten des Spieler:inhinzu.


    if currentColor == blue then
    playerPoints.Value += smallPoints
    elseif currentColor == green then
    playerPoints.Value += largePoints
    end
  3. Verwenden Sie eine andere Anweisung, um Punkte abzuziehen, wenn PunkteTeil entweder nicht blau noch grün war.


    if currentColor == blue then
    playerPoints.Value += smallPoints
    elseif currentColor == green then
    playerPoints.Value += largePoints
    else
    playerPoints.Value -= losePoints
    end
  4. Zum Schluss zerstöre das Teil nach der if-Anweisung, damit das Skript keine Punkte mehr geben kann.


    if currentColor == blue then
    playerPoints.Value += smallPoints
    elseif currentColor == green then
    playerPoints.Value += largePoints
    else
    playerPoints.Value -= losePoints
    end
    pointPart:Destroy()
  5. Spieltest und stelle sicher, dass jede Farbe wie erwartet Punkte gibt. Be sure to test all drei Bedingungen.

Feedback für Spieler geben

Die PointPart funktioniert, aber Spieler könnten nicht bemerken, dass etwas passiert, wenn sie nicht auf ihre Bestenlisteschauen. Behebe dies, indem du Partikel erstellst, wenn die PointPart zerstört wird.

Feedback hinzufügen, wenn Spieler ein Teil verwenden, wie z. B. Geräusche, Schütteln oder Partikel, macht Interaktionen mit Objekten für Spieler angenehmer.

Ein Partikeleffekt erstellen

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

  1. In givePoints() am unteren Rand erstellen Sie eine neue ParticleEmitter Instanz. Stellen Sie sicher, dass der Name der Instanz genau so geschrieben ist, wie in der Anzeige gezeigt.


    local particle = Instance.new("ParticleEmitter")
    end
  2. ParticleEmitter verwenden Farbsequenzen, um ihre Eigenschaftenzu steuern. Erstellen Sie eine neue FarbSequenz und geben Sie die aktuelle Farbe des Teils ein.


    -- Teil zerstören
    pointPart:Destroy()
    -- Partikel erstellen
    local particle = Instance.new("ParticleEmitter")
    particle.Color = ColorSequence.new(currentColor)
  3. Die Partikel muss in den Spieler übergehen, der sie berührt hat. Erstellen Sie eine Variable, um das Modelldes Spieler:inzu erhalten. Dann übergeben Sie die Partikel an den Kopf des Spieler:in.


    local particle = Instance.new("ParticleEmitter")
    particle.Color = ColorSequence.new(currentColor)
    local playerCharacter = player.Character
    particle.Parent = playerCharacter:WaitForChild("Head")
  4. Verwenden Sie task.wait() für eine schnelle Sekunde und zerstören Sie 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. Spieltest das Spiel und stelle sicher, dass die Partikel die Spieler nach dem Berühren der einzelnen Farben kurz folgen.

Troubleshooting-Tipps

An dieser Stelle, wenn Partikel nicht wie erwartet funktionieren, versuchen Sie einen der folgenden unten.

  • Erstellen Sie, wenn Sie einen neuen Instanz erstellen, dass ParticleEmitter mit exakt so geschrieben ist, wie in Klammern gezeigt und in Quellen.
  • Wenn Sie die Partikel beleiten, stellen Sie sicher, dass Sie : zwischen playerCharacter und WaitForChild() mit keinen Leerstellen verwenden.

Schließe PointScript ab

Eine fertige Version des Skripts kann unten verwendet werden.


local pointPart = script.Parent
--lokales Speichern = Spiel:GetService("ServerStorage")
-- Gibt einige Punkte
local blue = Color3.fromRGB(0, 0, 255)
-- Gibt mehr Punkte
local green = Color3.fromRGB(0, 255, 0)
-- Lässt Spieler Punkte verlieren
local red = Color3.fromRGB(255, 0, 0)
-- gold für spieler gegeben
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 dann zerstöre die Partikel
pointPart:Destroy()
-- Erzeugt einen Funkel-Effekt 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 unten des Skript, das. PL: die Skriptssein.
while true do
pointPart.Color = blue
task.wait(4)
pointPart.Color = green
task.wait(3)
pointPart.Color = red
task.wait(2)
end