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:
- 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.
- Füge ein ScreenGui Objekt in den Instanzen Ordner hinzu.
- Wählen Sie das ScreenGui Objekt aus, dann im Eigenschaften Fenster,
- Setze Name auf JumpPurchaseGui .
- Deaktiviere ResetOnSpawn , um sicherzustellen, dass die GUI dem Spieler beim Respawn zugewiesen bleibt, wenn er wieder erscheint.
- Füge im Explorer -Fenster einen TextButton in den JumpPurchaseGui -Container ein und benenne den Textblock dann in JumpButton um.
- (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:
Öffne im Explorer -Fenster das PlayerData -Modulskript im ServerStorage .
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_DATAplayerData[tostring(player.UserId)] = datareturn dataendfunction PlayerData.getValue(player, key)return getData(player)[key]endfunction PlayerData.updateValue(player, key, updateFunction)local data = getData(player)local oldValue = data[key]local newValue = updateFunction(oldValue)data[key] = newValuereturn newValueendreturn 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:
Öffne im Explorer -Fenster den Ordner Instanzen in ReplicatedStorage .
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.
Wählen Sie im Explorer -Fenster StarterPlayer .
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.
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.
Ersetze den Standardcode durch den folgenden Codes:
-- Dienstelocal ReplicatedStorage = game:GetService("ReplicatedStorage")local ServerStorage = game:GetService("ServerStorage")local Players = game:GetService("Players")-- Modulelocal Leaderboard = require(ServerStorage.Leaderboard)local PlayerData = require(ServerStorage.PlayerData)-- Ereignisselocal IncreaseJumpPowerFunction = ReplicatedStorage.Instances.IncreaseJumpPowerFunctionlocal JUMP_KEY_NAME = PlayerData.JUMP_KEY_NAMElocal COIN_KEY_NAME = PlayerData.COIN_KEY_NAMElocal JUMP_POWER_INCREMENT = 30local JUMP_COIN_COST = 5local function updateJumpPower(player, updateFunction)-- Aktualisieren Sie die Sprungkrafttabellelocal newJumpPower = PlayerData.updateValue(player, JUMP_KEY_NAME, updateFunction)-- Aktualisieren Sie die Sprungkraft der Spielerlocal character = player.Character or player.CharacterAdded:Wait()local humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenhumanoid.JumpPower = newJumpPower-- Aktualisieren Sie die Sprung-BestenlisteLeaderboard.setStat(player, JUMP_KEY_NAME, newJumpPower)endendlocal function onPurchaseJumpIncrease(player)local coinAmount = PlayerData.getValue(player, COIN_KEY_NAME)if coinAmount < JUMP_COIN_COST thenreturn falseend-- Erhöhe die Sprungkraft des Spieler:inupdateJumpPower(player, function(oldJumpPower)oldJumpPower = oldJumpPower or 0return oldJumpPower + JUMP_POWER_INCREMENTend)-- Aktualisieren Sie den Münztischlocal newCoinAmount = PlayerData.updateValue(player, COIN_KEY_NAME, function(oldCoinAmount)return oldCoinAmount - JUMP_COIN_COSTend)-- Aktualisieren Sie die Münzen-BestenlisteLeaderboard.setStat(player, COIN_KEY_NAME, newCoinAmount)return trueendlocal function onCharacterAdded(player)-- Setze die Sprungkraft des Spieler:inzurück, wenn der Charakter hinzugefügt wirdupdateJumpPower(player, function(_)return 0end)end-- Initialisiere alle Spieler, die vor der Verbindung mit dem Ereignis PlayerAdded hinzugefügt wurdenfor _, player in Players:GetPlayers() doonCharacterAdded(player)end-- Normale Initialisierung von Spielern aus dem Ereignis PlayerAddedlocal function onPlayerAdded(player)player.CharacterAdded:Connect(function()onCharacterAdded(player)end)endlocal function onPlayerRemoved(player)updateJumpPower(player, function(_)return nilend)endIncreaseJumpPowerFunction.OnServerInvoke = onPurchaseJumpIncreasePlayers.PlayerAdded:Connect(onPlayerAdded)Players.PlayerRemoving:Connect(onPlayerRemoved)Code-ErklärungDie 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:
Erstellen Sie im Explorer -Fenster ein Skript in ReplicatedStorage .
Wählen Sie das Skript, das. PL: die Skriptsaus, dann im Eigenschaften -Fenster,
- Setze Name auf JumpButtonClickHandler .
- Setze RunContext auf Client . Dies sagt der Engine, dass sie immer dieses Skript auf dem Client ausführen soll, um die Netzwerkkommunikation zu optimieren.
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.LocalPlayerlocal playerGui = player.PlayerGuilocal IncreaseJumpPowerFunction = ReplicatedStorage.Instances.IncreaseJumpPowerFunctionlocal jumpPurchaseGui = ReplicatedStorage.Instances.JumpPurchaseGuilocal jumpButton = jumpPurchaseGui.JumpButtonlocal function onButtonClicked()local success, purchased = pcall(IncreaseJumpPowerFunction.InvokeServer, IncreaseJumpPowerFunction)if not success then-- gekauft wird die fehlermeldung sein, wenn der erfolg falsch isterror(purchased)elseif success and not purchased thenwarn("Not enough coins!")endendjumpButton.Activated:Connect(onButtonClicked)-- Füge die JumpPurchaseGui zum Gui des Spieler:inhinzujumpPurchaseGui.Parent = playerGuiCode-ErklärungDie 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:
Klicke in der Toolbar auf die Schaltfläche Spielen . Studio wechselt in den Spieltest-Modus.
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.