Gracze mogą teraz zbierać monety i tracić je, gdy umierają, ale monety nic nie robią, a większość świata gry jest niedostępna bez możliwości skoku bardzo wysoko.Ta sekcja samouczka nauczy cię, jak zakończyć logikę dla swojego doświadczenia, dodając przycisk na ekranie, który wydaje monety, aby zwiększyć siłę skoku.
Stwórz przycisk aktualizacji
Interfejsy 2D w Roblox są zazwyczaj składane z kolekcji komponentów GUI w ramach kontenera GUI.W tym przypadku potrzebujesz tylko komponentu TextButton, który mówi Ulepsz skok (5 monet) wewnątrz pojemnika ScreenGui.
Aby utworzyć interfejs użytkownika:
- W oknie Eksploratora dodaj nową kartę do ReplicatedStorage , a następnie zmień nazwę karty na Instancje .Każdy obiekt w ReplicatedStorage jest dostępny dla klienta Roblox każdego gracza, gdzie są wyświetlane interfejsy użytkownika.
- Dodaj obiekt ScreenGui do folderu Instancje .
- Wybierz obiekt ScreenGui , a następnie w oknie Właściwości ,
- Ustaw nazwę na JumpPurchaseGui .
- Wyłącz ResetOnSpawn , aby zapewnić, że interfejs użytkownika pozostaje powiązany z graczem, gdy się odrodzi.
- W oknie Eksploratora wstaw TextButton do kontenera JumpPurchaseGui , a następnie zmień nazwę tekstowego przycisku na JumpButton .
- (Opcjonalnie) Dostosuj wygląd i pozycję przycisku poprzez skonfigurowanie jego właściwości. Proste sugestie obejmują:
- Ustaw właściwość Tekst na Ulepsz skok (5 monet) .
- Ustaw właściwość Rozmiar tekstu na 25.
- Ustaw Punkt przyłączenia na 1, 1 i Pozycję na {1, 0},{1, 0} aby przenieść przycisk do prawego dolnego rogu.
Dodasz przycisk do interfejsu użytkownika gracza później w tym samouczku, ale zanim to zrobisz, musisz określić całą logikę i dane, które są wymagane, aby przycisk działał.
Określ dane o mocy skoku
Obecnie przechowywana jest tylko liczba monet dla każdego gracza w skrypcie modułu Dane gracza .Musisz również przechowywać i aktualizować siłę skoku w ten sam sposób.Ponieważ funkcje w PlayerData nie są specyficzne dla danych, które są zmieniane, wszystko, co jest wymagane do przechowywania siły skoku gracza, to dodanie klucza Jump i zainicjowanie jego początkowej wartości w DEFAULT_PLAYER_DATA.
Aby zaktualizować skrypt modułu PlayerData , aby przechować siłę skoku:
W oknie Eksploratora otwórz skrypt modułu Dane gracza w ServerStorage .
Zastąp kod w skrypcie następującym przykładem, który inicjalizuje wartość Jump dla każdego gracza obok jego istniejącej wartości Coins:
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
Aktualizacja danych o mocy skoku
Teraz, gdy PlayerData jest w stanie śledzić siłę skoku, musisz wdrożyć logikę na serwerze, aby zaktualizować siłę skoku z prośbaklienta gracza.
Serwer i klient mogą komunikować się za pośrednictwem zdarzeń zdalnych lub funkcji zdalnych.Wydarzenia zdalne nie występują, gdy są uruchamiane i są odpowiednie do jednostronnej komunikacji.Funkcje zdalne generują, dopóki nie otrzymają odpowiedzi, która umożliwia dwukierunkową komunikację.W tym przypadku klient musi wiedzieć, czy serwer pomyślnie ulepszył siłę skoku gracza, więc zdalna funkcja jest idealna.
Aby wdrożyć aktualizację uaktualnienie:
W oknie Eksploratora otwórz katalog Instancje w ReplicatedStorage .
Włóż funkcję zdalną do folderu Instancje , a następnie zmień nazwę funkcji zdalnej na funkcję zwiększającą moc skoku .Zawsze tworzysz zdalne funkcje w ReplicatedStorage , ponieważ zarówno klient, jak i serwer muszą mieć do nich dostęp.
W oknie Eksploratora wybierz StarterPlayer .
W oknie Właściwości , włącz właściwość CharacterUseJumpPower .Domyślnie wartość siły skoku postaci nie określa ilości, z której postać skacze, więc ta opcja musi być włączona.
W oknie Eksploratora wstaw nowy skrypt do ServerScriptService , a następnie zmień nazwę skryptu na JumpService .Ten skrypt będzie zawierał logikę dla aktualizacji skoków.
Zastąp domyślny kod następującym kodem:
-- Usługilocal ReplicatedStorage = game:GetService("ReplicatedStorage")local ServerStorage = game:GetService("ServerStorage")local Players = game:GetService("Players")-- Modułylocal Leaderboard = require(ServerStorage.Leaderboard)local PlayerData = require(ServerStorage.PlayerData)-- Wydarzenialocal 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)-- Aktualizacja tabeli mocy skokulocal newJumpPower = PlayerData.updateValue(player, JUMP_KEY_NAME, updateFunction)-- Aktualizacja siły skoku graczylocal character = player.Character or player.CharacterAdded:Wait()local humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenhumanoid.JumpPower = newJumpPower-- Aktualizacja tabeli rankingskokuLeaderboard.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-- Zwiększ moc skoku graczaupdateJumpPower(player, function(oldJumpPower)oldJumpPower = oldJumpPower or 0return oldJumpPower + JUMP_POWER_INCREMENTend)-- Aktualizacja tabeli monetlocal newCoinAmount = PlayerData.updateValue(player, COIN_KEY_NAME, function(oldCoinAmount)return oldCoinAmount - JUMP_COIN_COSTend)-- Aktualizacja rankingmonetLeaderboard.setStat(player, COIN_KEY_NAME, newCoinAmount)return trueendlocal function onCharacterAdded(player)-- Zresetuj siłę skoku gracza, gdy dodano postaćupdateJumpPower(player, function(_)return 0end)end-- Zainicjuj dowolnych graczy dodanych przed połączeniem z wydarzeniem PlayerAddedfor _, player in Players:GetPlayers() doonCharacterAdded(player)end-- Normalna inicjalizacja graczy z wydarzenia 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)Wyjaśnienie koduNastępujące sekcje opisują kod bardziej szczegółowo.
Aktualizacja danych o mocy skoku - updateJumpPower() aktualizuje siłę skoku gracza i tabelę wyników, aby zapewnić wizualną opiniezwrotną.Funkcja ta przypomina kod, który szkodzi graczom w tworzeniu zagrożeń dla graczy.Dostarczono model Character i Humanoid istniejący dla gracza, który jest aktualizowany, funkcja aktualizuje właściwość JumpPower do nowej wartości przechowywanej przez PlayerData , zwiększając ją o 30.Jeśli chcesz, aby twoja gra trwała nieco dłużej, możesz zmniejszyć tę liczbę.
Zweryfikuj prośby serwera - onPurchaseJumpIncrease() po raz pierwszy sprawdza, czy gracz rzeczywiście posiada liczbę monet wymaganą do zakupu uaktualnienie. Wszystkie żądania od klientów do serwera powinny być zweryfikowane , aby zapobiec nadsyłaniu przez złe podmioty fałszywych żądań i wykorzystaniu Twojego doświadczenia.
Dodaj przycisk do interfejsu GUI gracza
Przedmiot ScreenGui pokazuje się na ekranie tylko wtedy, gdy jest powiązany z obiektem gracza PlayerGui.Domyślnie zawiera to interfejs użytkownika systemu, takich jak okno czatu.Musisz teraz utworzyć skrypt w ReplicatedStorage , aby skopiować przycisk aktualizacji do interfejsu każdego gracza i wdrożyć zachowanie, gdy zostanie naciśnięty.
Aby dodać przycisk do interfejsu użytkownika gracza po dołączeniu:
W oknie Eksploratora utwórz skrypt w ReplicatedStorage .
Wybierz skrypt, a następnie w oknie Właściwości ,
- Ustaw nazwę na JumpButtonClickHandler .
- Ustaw RunContext na klienta . Powoduje to, że silnik zawsze uruchamia ten skrypt na klientzie, aby zoptymalizować komunikację sieciową.
W otwartym skrypcie zastąp domyślny kod następującym kodem:
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-- kupione będzie wiadomość o błędzie, jeśli sukces jest fałszywyerror(purchased)elseif success and not purchased thenwarn("Not enough coins!")endendjumpButton.Activated:Connect(onButtonClicked)-- Dodaj JumpPurchaseGui do interfejsu graczajumpPurchaseGui.Parent = playerGuiWyjaśnienie koduNastępujące sekcje opisują kod bardziej szczegółowo.
- Uzyskaj odniesienia do interfejsu użytkownika i funkcji serwera - zmienne IncreaseJumpPowerFunction, jumpPurchaseGui i jumpButton zawierają odniesienia do funkcji i interfejsu użytkownika, które będziesz potrzebować później.
- Określ obsługę zdarzeń - onButtonClicked() określa logikę dla przypadku, gdy użytkownicy klikną przycisk aktualizacji.Używa pcall() (ochronione wezwanie) do uruchomienia RemoteFunction .Każda komunikacja klient-serwer, tak jak ta, wymaga pcall() do obsługi błędów lub problemów z połączeniem.
- Podłącz sterownik do przycisku - Wydarzenie Activated jest kompatybilne na wszystkich platformach, w tym na myszy, ekranie dotykowym lub kontekście gamepada.Włącza się, gdy jest wysłany kliknięcie , dotknięcie lub przycisk gamepada .
Testowanie gry
Powinieneś teraz być w stanie kupić ulepszenia skoku za monety za pomocą przycisku aktualizacji. Aby przetestować projekt:
Na pasku narzędzi kliknij przycisk Graj . Studio wchodzi w tryb testowania gry.
Jeśli twoje skrypty działają prawidłowo, pojawia się przycisk do kupowania siły skoku na ekranie.Spróbuj kliknąć przycisk, zanim zbierzesz jakiekolwiek monety, aby sprawdzić, czy nie przyznaje ci dodatkowej siły skoku, a następnie spróbuj zebrać kilka monet i sprawdź, czy aktualizacja działa, gdy ponownie klikniesz.
Teraz, gdy kod jest kompletny, spróbuj zrównoważyć grę poprzez ilość i pozycję monet.Dodaj więcej monet, jeśli gra wydaje się zbyt powolna, lub odejmij monety i umieść je w wyzywających miejscach, jeśli wydaje się zbyt szybka i łatwa.