Skriptieren Sie einen Upgrade-Button

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


Spieler können jetzt Münzen sammeln und sie verlieren, wenn sie sterben, aber die Münzen tun nichts, und die meiste Spielwelt ist ohne die Fähigkeit, sehr hoch zu springen, nicht zugänglich.Dieser Abschnitt des Tutorials lehrt dich, wie du die Logik für deine Erfahrung abschließt, indem du einen auf dem Bildschirm befindlichen Knopf hinzufügst, der Münzen ausgibt, um die Sprungkraft zu erhöhen.

Erstelle die Upgrade-Schaltfläche

2D-Schnittstellen in Roblox bestehen typischerweise aus einer Sammlung von GUI-Komponenten innerhalb eines GUI-Containers.In diesem Fall benötigen Sie nur eine TextButton, die sagt Upgrade-Sprung (5 Münzen) innerhalb eines ScreenGui.

Um die grafische Benutzeroberflächezu erstellen:

  1. Füge im Explorer -Fenster einen neuen Ordner in ReplicatedStorage hinzu und benenne den Ordner dann in Instanzen um.Jedes Objekt in ReplicatedStorage ist für den Roblox-Client jedes Spieler:inzugänglich, wo GUIs angezeigt werden.
  2. Füge ein ScreenGui Objekt in den Instanzen Ordner hinzu.
  3. Wählen Sie das ScreenGui Objekt aus, dann im Eigenschaften Fenster,
    1. Setze Name auf JumpPurchaseGui .
    2. Deaktiviere ResetOnSpawn , um sicherzustellen, dass die GUI dem Spieler beim Respawn zugewiesen bleibt, wenn er wieder erscheint.
  4. Füge im Explorer -Fenster einen TextButton in den JumpPurchaseGui -Container ein und benenne den Textblock dann in JumpButton um.
  5. (Optional) Personalisieren Sie das Aussehen und die Position des Buttons, indem Sie seine Eigenschaften konfigurieren. Einfache Vorschläge umfassen:
    • Setze die Text -Eigenschaft auf Upgrade-Sprung (5 Münzen) .
    • Setze die Textgröße -Eigenschaft auf 25.
    • Setze Ankerpunkt auf 1, 1 und Position auf {1, 0},{1, 0}, um den Knopf in die rechte untere Ecke zu bewegen.

Du fügst dem GUI des Spieler:inspäter in diesem Tutorial einen Button hinzu, aber bevor du das tust, musst du die gesamte Logik und Daten definieren, die für den Betrieb des Buttons erforderlich sind.

Definieren Sie Sprungkraftdaten

Derzeit wird nur die Münzenanzahl für jeden Spieler im Skript, das. PL: die Skriptsgespeichert.Du musst auch Sprungkraft auf die gleiche Weise speichern und aktualisieren.Da die Funktionen in PlayerData nicht spezifisch für die zu ändernden Daten sind, ist alles, was zum Speichern der Sprungkraft des Spielers erforderlich ist, die Ergänzung einer Jump -Taste und die Initialisierung ihres Werts in DEFAULT_PLAYER_DATA.

Um das Spielerdaten -Modulskript zu aktualisieren, um Sprungkraft zu speichern:

  1. Öffne im Explorer -Fenster das PlayerData -Modulskript im ServerStorage .

  2. Ersetze den Code im Skript durch die folgende Probe, die einen Jump Wert für jeden Spieler neben ihrem bestehenden Coins Wert initialisiert:


    local PlayerData = {}
    PlayerData.COIN_KEY_NAME = "Coins"
    PlayerData.JUMP_KEY_NAME = "Jump"
    local playerData = {
    --[[
    [userId: string] = {
    ["Coins"] = coinAmount: number,
    ["Jump"] = jumpPower: number
    }
    --]]
    }
    local DEFAULT_PLAYER_DATA = {
    [PlayerData.COIN_KEY_NAME] = 0,
    [PlayerData.JUMP_KEY_NAME] = 0,
    }
    local function getData(player)
    local data = playerData[tostring(player.UserId)] or DEFAULT_PLAYER_DATA
    playerData[tostring(player.UserId)] = data
    return data
    end
    function PlayerData.getValue(player, key)
    return getData(player)[key]
    end
    function PlayerData.updateValue(player, key, updateFunction)
    local data = getData(player)
    local oldValue = data[key]
    local newValue = updateFunction(oldValue)
    data[key] = newValue
    return newValue
    end
    return PlayerData

Aktualisieren der Sprungkraftdaten

Jetzt, da Spielerdaten in der Lage ist, Sprungkraft zu verfolgen, musst du Logik auf dem Server implementieren, um die Sprungkraft von einer Anfrageeines Spieler:inzu verbessern.

Der Server und der Client können über entweder Remote-Ereignisse oder Remote-Funktionen kommunizieren.Fernereignisse ergeben sich nicht, wenn sie abgefeuert werden, und sind für eine einseitige Kommunikation geeignet.Fernfunktionen geben bis sie eine Antwort erhalten, die eine Zwei-Wege-Kommunikation ermöglicht.In diesem Fall muss der Client wissen, ob der Server die Sprungkraft des Spieler:inerfolgreich verbessert hat, also ist eine Remote-Funktion ideal.

Um das Sprung-Upgrade zu implementieren:

  1. Öffne im Explorer -Fenster den Ordner Instanzen in ReplicatedStorage .

  2. Füge eine Remotefunktion in den Instanzen -Ordner ein und benenne die Remote-Funktion dann in IncreaseJumpPowerFunction um.Du erstellst immer remote-Funktionen in ReplicatedStorage , weil sowohl der Client als auch der Server auf sie zugreifen können müssen.

    Studio's Explorer window with the IncreaseJumpPowerFunction script highlighted under the Instances folder.
  3. Wählen Sie im Explorer -Fenster StarterPlayer .

  4. Aktiviere im Eigenschaften -Fenster die Eigenschaft CharacterUseJumpPower .Standardmäßig definiert der Sprungkraftwert eines Charakters nicht die Menge, die ein Charakter springt, daher muss dies aktiviert werden.

  5. Füge im Explorer -Fenster ein neues Skript in ServerScriptService ein und benenne das Skript dann in JumpService um.Dieses Skript wird die Logik für Sprung-Upgrades enthalten.

  6. Ersetze den Standardcode durch den folgenden Codes:


    -- Dienste
    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local ServerStorage = game:GetService("ServerStorage")
    local Players = game:GetService("Players")
    -- Module
    local Leaderboard = require(ServerStorage.Leaderboard)
    local PlayerData = require(ServerStorage.PlayerData)
    -- Ereignisse
    local IncreaseJumpPowerFunction = ReplicatedStorage.Instances.IncreaseJumpPowerFunction
    local JUMP_KEY_NAME = PlayerData.JUMP_KEY_NAME
    local COIN_KEY_NAME = PlayerData.COIN_KEY_NAME
    local JUMP_POWER_INCREMENT = 30
    local JUMP_COIN_COST = 5
    local function updateJumpPower(player, updateFunction)
    -- Aktualisieren Sie die Sprungkrafttabelle
    local newJumpPower = PlayerData.updateValue(player, JUMP_KEY_NAME, updateFunction)
    -- Aktualisieren Sie die Sprungkraft der Spieler
    local character = player.Character or player.CharacterAdded:Wait()
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    humanoid.JumpPower = newJumpPower
    -- Aktualisieren Sie die Sprung-Bestenliste
    Leaderboard.setStat(player, JUMP_KEY_NAME, newJumpPower)
    end
    end
    local function onPurchaseJumpIncrease(player)
    local coinAmount = PlayerData.getValue(player, COIN_KEY_NAME)
    if coinAmount < JUMP_COIN_COST then
    return false
    end
    -- Erhöhe die Sprungkraft des Spieler:in
    updateJumpPower(player, function(oldJumpPower)
    oldJumpPower = oldJumpPower or 0
    return oldJumpPower + JUMP_POWER_INCREMENT
    end)
    -- Aktualisieren Sie den Münztisch
    local newCoinAmount = PlayerData.updateValue(player, COIN_KEY_NAME, function(oldCoinAmount)
    return oldCoinAmount - JUMP_COIN_COST
    end)
    -- Aktualisieren Sie die Münzen-Bestenliste
    Leaderboard.setStat(player, COIN_KEY_NAME, newCoinAmount)
    return true
    end
    local function onCharacterAdded(player)
    -- Setze die Sprungkraft des Spieler:inzurück, wenn der Charakter hinzugefügt wird
    updateJumpPower(player, function(_)
    return 0
    end)
    end
    -- Initialisiere alle Spieler, die vor der Verbindung mit dem Ereignis PlayerAdded hinzugefügt wurden
    for _, player in Players:GetPlayers() do
    onCharacterAdded(player)
    end
    -- Normale Initialisierung von Spielern aus dem Ereignis PlayerAdded
    local function onPlayerAdded(player)
    player.CharacterAdded:Connect(function()
    onCharacterAdded(player)
    end)
    end
    local function onPlayerRemoved(player)
    updateJumpPower(player, function(_)
    return nil
    end)
    end
    IncreaseJumpPowerFunction.OnServerInvoke = onPurchaseJumpIncrease
    Players.PlayerAdded:Connect(onPlayerAdded)
    Players.PlayerRemoving:Connect(onPlayerRemoved)

    Die folgenden Abschnitte beschreiben den Code detaillierter.

    • Aktualisieren Sie die Sprungkraftdaten - updateJumpPower() aktualisiert die Sprungkraft des Spielers und der Rangliste, um visuelles Feedback zu geben.Diese Funktion ähnelt dem Code, der Spielern Schaden zufügt in Spielergefahren erstellen.Geliefert ein Character Modell und Humanoid existiert für den Spieler, der aufgerüstet wird, aktualisiert die Funktion die JumpPower Eigenschaft auf den neuen Wert, der von PlayerData gespeichert wird, und erhöht sie um 30.Wenn du dein Spiel etwas länger dauern lassen möchtest, kannst du diese Zahl verringern.

    • Serveranfragen validieren - onPurchaseJumpIncrease() prüft zuerst, ob der Spieler tatsächlich die Anzahl der Münzen hat, die für den Kauf der Upgradeerforderlich sind. Alle Anfragen von Clients an den Server sollten validiert werden, um zu verhindern, dass schlechte Akteure falsche Anfragen stellen und deine Erlebnisausnutzen.

Füge die Schaltfläche zur grafische Benutzeroberfläche

Ein ScreenGui Objekt wird nur auf dem Bildschirm angezeigt, wenn es einem Spieler:in Objekt zugewiesen ist.Standardmäßig enthält dies das System-GUI wie das Chat-Fenster.Du musst jetzt ein Skript in ReplicatedStorage erstellen, um den Upgrade-Button in die GUI jedes Spieler:inzu kopieren und das Verhalten zu implementieren, wenn er gedrückt wird.

Um die Schaltfläche der GUI des Spieler:inhinzuzufügen, wenn sie beitreten:

  1. Erstellen Sie im Explorer -Fenster ein Skript in ReplicatedStorage .

  2. Wählen Sie das Skript, das. PL: die Skriptsaus, dann im Eigenschaften -Fenster,

    1. Setze Name auf JumpButtonClickHandler .
    2. Setze RunContext auf Client . Dies sagt der Engine, dass sie immer dieses Skript auf dem Client ausführen soll, um die Netzwerkkommunikation zu optimieren.
  3. Ersetze im offenen Skript, das. PL: die Skriptsden Standardcode durch den folgenden Codes:


    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
    local playerGui = player.PlayerGui
    local IncreaseJumpPowerFunction = ReplicatedStorage.Instances.IncreaseJumpPowerFunction
    local jumpPurchaseGui = ReplicatedStorage.Instances.JumpPurchaseGui
    local jumpButton = jumpPurchaseGui.JumpButton
    local function onButtonClicked()
    local success, purchased = pcall(IncreaseJumpPowerFunction.InvokeServer, IncreaseJumpPowerFunction)
    if not success then
    -- gekauft wird die fehlermeldung sein, wenn der erfolg falsch ist
    error(purchased)
    elseif success and not purchased then
    warn("Not enough coins!")
    end
    end
    jumpButton.Activated:Connect(onButtonClicked)
    -- Füge die JumpPurchaseGui zum Gui des Spieler:inhinzu
    jumpPurchaseGui.Parent = playerGui

    Die folgenden Abschnitte beschreiben den Code detaillierter.

    • Erhalten Sie Referenzen auf die GUI und Serverfunktion - Die Variablen IncreaseJumpPowerFunction , jumpPurchaseGui und jumpButton enthalten Referenzen auf die Funktion und die GUI, die die Funktion aufruft, die Sie später benötigen.
    • Definieren Sie den Ereignishändler - onButtonClicked() definiert Logik für den Fall, dass Benutzer auf die Schaltfläche "Upgrade" klicken.Es verwendet pcall() (geschützter Anruf), um die RemoteFunction aufzurufen.Jede Client-Server-Kommunikation wie diese erfordert pcall(), um Fehler oder Verbindungsprobleme zu behandeln.
    • Verbinde den Handler mit der Schaltfläche - Das Ereignis Activated ist auf allen Plattformen, einschließlich Maus, Touchscreen oder Gamepad-Kontexten kompatibel.Es wird ausgelöst, wenn ein Klick , Berührung oder Gamepad-Taste freigegeben wird.

Spieltest

Du solltest jetzt in der Lage sein, Sprung-Upgrades für Münzen mit dem Upgrade-Button zu kaufen. Um das Projekt zu testen:

  1. Klicke in der Toolbar auf die Schaltfläche Spielen . Studio wechselt in den Spieltest-Modus.

    Play button highlighted in Studio's playtesting options.
  2. Wenn Ihre Skripte richtig funktionieren, erscheint auf dem Bildschirm eine Schaltfläche zum Kauf von Sprungkraft.Versuchen Sie, die Schaltfläche zu klicken, bevor Sie irgendwelche Münzen sammeln, um zu überprüfen, dass sie Ihnen keine zusätzliche Sprungkraft verleiht, und versuchen Sie dann, einige Münzen zu sammeln und zu sehen, ob das Upgrade funktioniert, wenn Sie erneut klicken.

Jetzt, da der Code vollständig ist, versuche, das Spiel durch die Menge und die Positionen der Münzen auszubalancieren.Füge mehr Münzen hinzu, wenn das Spiel zu langsam ist, oder subtrahiere Münzen und stelle sie an herausfordernde Orte, wenn es zu schnell und einfach ist.