Skryptuj przycisk aktualizacji

*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 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:

  1. 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.
  2. Dodaj obiekt ScreenGui do folderu Instancje .
  3. Wybierz obiekt ScreenGui , a następnie w oknie Właściwości ,
    1. Ustaw nazwę na JumpPurchaseGui .
    2. Wyłącz ResetOnSpawn , aby zapewnić, że interfejs użytkownika pozostaje powiązany z graczem, gdy się odrodzi.
  4. W oknie Eksploratora wstaw TextButton do kontenera JumpPurchaseGui , a następnie zmień nazwę tekstowego przycisku na JumpButton .
  5. (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:

  1. W oknie Eksploratora otwórz skrypt modułu Dane gracza w ServerStorage .

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

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:

  1. W oknie Eksploratora otwórz katalog Instancje w ReplicatedStorage .

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

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

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

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

  6. Zastąp domyślny kod następującym 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)
    -- Aktualizacja tabeli mocy skoku
    local newJumpPower = PlayerData.updateValue(player, JUMP_KEY_NAME, updateFunction)
    -- Aktualizacja siły skoku graczy
    local character = player.Character or player.CharacterAdded:Wait()
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    humanoid.JumpPower = newJumpPower
    -- Aktualizacja tabeli rankingskoku
    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)
    -- Aktualizacja tabeli monet
    local newCoinAmount = PlayerData.updateValue(player, COIN_KEY_NAME, function(oldCoinAmount)
    return oldCoinAmount - JUMP_COIN_COST
    end)
    -- Aktualizacja rankingmonet
    Leaderboard.setStat(player, COIN_KEY_NAME, newCoinAmount)
    return true
    end
    local function onCharacterAdded(player)
    -- Zresetuj siłę skoku gracza, gdy dodano postać
    updateJumpPower(player, function(_)
    return 0
    end)
    end
    -- Zainicjuj dowolnych graczy dodanych przed połączeniem z wydarzeniem PlayerAdded
    for _, player in Players:GetPlayers() do
    onCharacterAdded(player)
    end
    -- Normalna inicjalizacja 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ę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:

  1. W oknie Eksploratora utwórz skrypt w ReplicatedStorage .

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

    1. Ustaw nazwę na JumpButtonClickHandler .
    2. Ustaw RunContext na klienta . Powoduje to, że silnik zawsze uruchamia ten skrypt na klientzie, aby zoptymalizować komunikację sieciową.
  3. 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.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
    -- kupione będzie wiadomość o błędzie, 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 interfejsu gracza
    jumpPurchaseGui.Parent = playerGui

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

  1. Na pasku narzędzi kliknij przycisk Graj . Studio wchodzi w tryb testowania gry.

    Play button highlighted in Studio's playtesting options.
  2. 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.