Zeszyj przycisk Ulepszenia

*Ta zawartość została przetłumaczona przy użyciu narzędzi AI (w wersji beta) i może zawierać błędy. Aby wyświetlić tę stronę w języku angielskim, kliknij tutaj.


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:

  1. 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.
  2. Dodaj obiekt ScreenGUI do katalogu Instances.
  3. Wybierz obiekt ScreenGUI i w oknie Właściwości,
    1. Ustaw imię na JumpPurchaseGui .
    2. Wyłącz ResetOnSpawn , aby upewnić się, że GUI pozostanie związana z graczem, gdy się odrodzi.
  4. W oknie Explorer , wpisz TextButton w JumpPurchaseGui pojemniku, a następnie zmień nazwę przycisku tekstowego na 1> JumpButton1> .
  5. (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:

  1. W oknie Explorer, otwórz skrypt modułu PlayerData w ServerStorage.

  2. 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_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

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:

  1. W oknie Explorer, otwórz katalog Instancji w ReplicatedStorage.

  2. 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.

    Studio's Explorer window with the IncreaseJumpPowerFunction script highlighted under the Instances folder.
  3. W oknie Explorer wybierz StarterPlayer .

  4. 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.

  5. 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.

  6. Zastąp standardowy kod następujązym kodem:


    -- Usługi
    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local ServerStorage = game:GetService("ServerStorage")
    local Players = game:GetService("Players")
    -- Moduły
    local Leaderboard = require(ServerStorage.Leaderboard)
    local PlayerData = require(ServerStorage.PlayerData)
    -- Wydarzenia
    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)
    -- Aktualizuj tabelę mocy skoku
    local newJumpPower = PlayerData.updateValue(player, JUMP_KEY_NAME, updateFunction)
    -- Aktualizuj moc skoku graczy
    local character = player.Character or player.CharacterAdded:Wait()
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    humanoid.JumpPower = newJumpPower
    -- Aktualizuj tabelę ranking
    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
    -- Zwiększ moc skoku gracza
    updateJumpPower(player, function(oldJumpPower)
    oldJumpPower = oldJumpPower or 0
    return oldJumpPower + JUMP_POWER_INCREMENT
    end)
    -- Aktualizuj tabelę monet
    local newCoinAmount = PlayerData.updateValue(player, COIN_KEY_NAME, function(oldCoinAmount)
    return oldCoinAmount - JUMP_COIN_COST
    end)
    -- Aktualizuj rankingmonet
    Leaderboard.setStat(player, COIN_KEY_NAME, newCoinAmount)
    return true
    end
    local function onCharacterAdded(player)
    -- Zresetuj siłę skoku gracza, gdy postać zostanie dodana
    updateJumpPower(player, function(_)
    return 0
    end)
    end
    -- Zainicjatyzuj dowolnych graczy dodanych przed połączeniem się z wydarzeniem PlayerAdded
    for _, player in Players:GetPlayers() do
    onCharacterAdded(player)
    end
    -- Normalna inizializacja graczy z wydarzenia 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)

    Nastę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ą:

  1. W oknie Explorer , utwórz Skrypt w ReplicatedStorage .

  2. Wybierz skrypt, a następnie w oknie Właściwości ,

    1. Ustaw Nazwę na JumpButtonClickHandler .
    2. Ustaw Kontekst bieżący na Klient . To powoduje, że silnik zawsze wykonuje ten skrypt na klencie, aby zoptymalizować komunikację sieciową.
  3. 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.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
    -- zakupy będą to błądowe wiadomość jeśli sukces jest fałszywy
    error(purchased)
    elseif success and not purchased then
    warn("Not enough coins!")
    end
    end
    jumpButton.Activated:Connect(onButtonClicked)
    -- Dodaj JumpPurchaseGui do GUI gracza
    jumpPurchaseGui.Parent = playerGui

    Nastę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:

  1. W menu Kliknij przycisk Graj. Studio wchodzi w tryb testu.

    Studio's Home tab with the Play button highlighted in the menu bar.
  2. 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.