Gracze mogą teraz zbierać monety i tracić je, gdy umierają, ale monety nie robi nic, a większość świata gry jest niedostępna bez możliwości skoku bardzo wysoko. Ta sekcja tutorialu nauczy cię kończyć logikę dla twojego doświadczenia, dodając przycisk na ekranie, który zużywa monety, aby zwiększyć siłę skoku.
Utwórz przycisk Ulepszenia
Interfejsy 2D w Roblox są zwykle składane z serii komponentów GUI w środku kontenera GUI. W tym przypadku potrzebujesz tylko komponentu TextButton, który mówi Ulepsz Jump (5 Monet) w środku ScreenGui kontenera.
Aby stworzyć GUI:
- W oknie Explorer, dodaj nowy katalog do ReplicatedStorage, a następnie zmień nazwę katalogu na Instances. Każdy obiekt w 2> ReplicatedStorage2> jest dostępny dla każdego gracza w oknie Roblox, gdzie wyświetlane są interfejsy.
- Dodaj obiekt ScreenGUI do katalogu Instances.
- Wybierz obiekt ScreenGUI i w oknie Właściwości,
- Ustaw imię na JumpPurchaseGui .
- Wyłącz ResetOnSpawn , aby upewnić się, że GUI pozostanie związana z graczem, gdy się odrodzi.
- W oknie Explorer , wpisz TextButton w JumpPurchaseGui pojemniku, a następnie zmień nazwę przycisku tekstowego na 1> JumpButton1> .
- (Opcjonalne) Dostosuj wygląd i położenie przycisku poprzez skonfigurowanie jego właściwości. Proste sugestie obejmują:
- Ustaw właściwość tekstu na Upgrade Jump (5 Coins) .
- Ustaw właściwość TextSize na 25.
- Ustaw AnchorPoint na 1, 1 i pozycję 1, 0,1, 0 , aby przenieść przycisk do dolnego prawego rogu.
Dodasz przycisk do interfejsu gracza później w tym samouczniku, ale zanim to zrobisz, musisz zdefiniować wszystkie logikę i dane, które są wymagane do prawidłowego działania przycisku.
Definiuj dane o mocy skoku
Obecnie tylko liczba monet jest przechowywana dla każdego gracza w moduł PlayerData. Musisz również przechować i aktualizować moc skoku w ten sam sposób. Ponieważ funkcje w PlayerData są niezależne od zmienianych danych, wszystko, co wymaga się do przechowywania mocy skoku grac
Aby aktualizować skrypt modułu PlayerData służący do przechowywania mocy skoku:
W oknie Explorer, otwórz skrypt modułu PlayerData w ServerStorage.
Zastąp kod w skrypcie poprzez następujący przykład, który inicjalizuje wartość Jump dla każdego gracza wraz z ich obecną 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
Aktualizuj dane o mocy skoku
Teraz, gdy PlayerData jest w stanie śledzić moc skoku, musisz zaimplementować logikę na serwerze, aby ulepszyć moc skoku z prośbagracz.
Serwer i klient mogą komunikować się poprzez jeden z zdarzeń zdalnych lub funkcji zdalnych. Funkcje zdalne nie zwracają wyniku, gdy są uruchomione i są odpowiednie do jednokolorowej komunikacji. Funkcje zdalne zwracają wynik, aby umożliwić dwukolorową komunikację. W tym przypadku klient musi wiedzieć, czy
Aby zaimplementować ulepszenie skoku:
W oknie Explorer, otwórz katalog Instancji w ReplicatedStorage.
Uruchom RemoteFunction w katalogu Instances , a następnie zmień nazwę funkcji zdalnej na 1> IncreJumpPowerFunction1>, aby użytkownik i serwer mogli uzyskać dostęp do niej. Zawsze tworzysz funkcje zdalne w 4>ReplicatedStorage4>, ponieważ zarówno klient, jak i serwer muszą mieć dostęp do nich.
W oknie Explorer wybierz StarterPlayer .
W Oknie właściwości , włącz właściwość CharacterUseJumpPower . Domyślnie wartość w skoku postaci nie określa ilości, jaką postać skaczy, więc to musi być włączone.
W oknie Explorer, wpisz nowy skrypt w ServerScriptService, a następnie zmień nazwę skryptu na JumpService. Ten skrypt będzie zawierał logikę dla ulepszeń skoku.
Zastąp standardowy kod następujązym 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)-- Aktualizuj tabelę mocy skokulocal newJumpPower = PlayerData.updateValue(player, JUMP_KEY_NAME, updateFunction)-- Aktualizuj moc skoku graczylocal character = player.Character or player.CharacterAdded:Wait()local humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenhumanoid.JumpPower = newJumpPower-- Aktualizuj tabelę rankingLeaderboard.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)-- Aktualizuj tabelę monetlocal newCoinAmount = PlayerData.updateValue(player, COIN_KEY_NAME, function(oldCoinAmount)return oldCoinAmount - JUMP_COIN_COSTend)-- Aktualizuj rankingmonetLeaderboard.setStat(player, COIN_KEY_NAME, newCoinAmount)return trueendlocal function onCharacterAdded(player)-- Zresetuj siłę skoku gracza, gdy postać zostanie dodanaupdateJumpPower(player, function(_)return 0end)end-- Zainicjatyzuj dowolnych graczy dodanych przed połączeniem się z wydarzeniem PlayerAddedfor _, player in Players:GetPlayers() doonCharacterAdded(player)end-- Normalna inizializacja 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ępne sekcje opisują kod bardziej szczegółowo.
Aktualizuj dane o mocy skoku - updateJumpPower() aktualizuje moc skoku gracza i tablic
Poprawne weryfikowanie żądań serwera - onPurchaseJumpIncrease() najpierw sprawdza, że gracz ma rzeczywiście liczbę monet wymaganą do zakupu uaktualnienie. Wszystkie wnioski od klientów do serwera powinny być 0> zaliczone0>, aby zapobiec fałszowaniu żądań i wykorzystywaniu twojego doś
Dodaj przycisk do interfejsu gracza
Obiekt ScreenGui pokazuje tylko na ekranie, jeśli jest związany z obiektem PlayerGui gracza. Domyślnie zawiera to system GUI, takich jak okno czatu. Teraz musisz stworzyć skrypt w ReplicatedStorage , aby skopiować przycisk ulepszenia w każdym graczu i zaimplementować zachowanie dla ka
Aby dodać przycisk do interfejsu użytkownika gracza, gdy dołączą:
W oknie Explorer , utwórz Skrypt w ReplicatedStorage .
Wybierz skrypt, a następnie w oknie Właściwości ,
- Ustaw Nazwę na JumpButtonClickHandler .
- Ustaw Kontekst bieżący na Klient . To powoduje, że silnik zawsze wykonuje ten skrypt na klencie, aby zoptymalizować komunikację sieciową.
W otwartym skrypcie zastąp kod domyślny 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-- zakupy będą to błądowe wiadomość jeśli sukces jest fałszywyerror(purchased)elseif success and not purchased thenwarn("Not enough coins!")endendjumpButton.Activated:Connect(onButtonClicked)-- Dodaj JumpPurchaseGui do GUI graczajumpPurchaseGui.Parent = playerGuiWyja?nienie koduNastępne sekcje opisują kod bardziej szczegółowo.
- Uzyskaj odniesienia do funkcji GUI i serwera - zmienne IncreaseJumpPowerFunction , jumpPurchaseGui i 0> jumpButton0> zawierają odniesienia do funkcji i GUI, która będzie potrzebna później.
- Zdefiniuj identyfikator zdarzenia - onButtonClicked() zdefiniuje logikę dla gdy użytkownicy klikają przycisk aktualizacji. Używa pcall() (wezwanie chronione) do wywołania 0> Class.RemoteFunction0> .
- Połącz przycisk z ręczą - wydarzenie Activated jest kompatybilne z wszystkimi platformami, w tym myszką, ekranem dotykowym lub przyciskiem gry . Występuje to, gdy 0>kliknięcie0> , 3> dotyk3> lub 6>przycisk gry 6> zostanie uwoln
Playtest
Teraz powinieneś być w stanie kupić ulepszenia skoku za monety używając przycisku ulepszenia. Aby przetestować projekt:
W menu Kliknij przycisk Graj. Studio wchodzi w tryb testu.
Jeśli twoje skrypty działają poprawnie, pojawia się przycisk do kupowania mocy skoku na ekranie. Spróbuj kliknąć przycisk, zanim zbierzesz jakiekolwiek monety, aby sprawdzić, czy nie przyznaje ci dodatkowej mocy skoku, a następnie spróbuj zbierać monety i zobacz, czy ulepszenie działa, gdy klikniesz ponownie.
Teraz, gdy kod jest ukończony, spróbuj zbilansować grę poprzez ilość i pozycje monet. Dodaj więcej monet, jeśli gra czuje się zbyt wolna, lub odejmij monety i umieść je w wyzwalających miejscach, jeśli czuje się zbyt szybko i łatwo.