Cree un Botón de Mejora

*Este contenido se traduce usando la IA (Beta) y puede contener errores. Para ver esta página en inglés, haz clic en aquí.


Los jugadores ahora pueden recoger monedas y perderlas cuando muere, pero las monedas no hacen nada, y la mayor parte del mundo del juego está inaccesible sin la capacidad de saltar muy alto. Esta sección del tutorial te enseña cómo terminar la lógica de tu experiencia agregando un botón en la pantalla que gasta monedas para aumentar el poder de salto.

Crea el Botón de Mejorar

Las interfaces 2D en Roblox generalmente se basan en una colección de componentes de GUI dentro de un contenedor de GUI. En este caso, solo necesitas un componente de TextButton que dice Mejorar salto (5 monedas) dentro de un contenedor de ScreenGui .

Para crear la Interfaz gráfica (o GUI):

  1. En la ventana Explorer, agregue una carpeta nueva en ReplicatedStorage, luego renombre la carpeta a Instances . Cualquier objeto en 2> ReplicatedStorage2> es accesible para cada jugadorde Roblox, donde se muestran los GUI.
  2. Añade un objeto ScreenGUI a la carpeta Instances.
  3. Seleccione el objeto ScreenGUI y, en la ventana Propiedades ,
    1. Establece Nombre a JumpPurchaseGui .
    2. Desactivar Restablecer en el spawn para asegurar que la GUI se mantenga padreada al jugador cuando reaparezca.
  4. En la ventana Explorer , inserta un TextButton en el contenedor JumpPurchaseGui , luego renombra el botón de texto a 1> JumpButton1> .
  5. (Opcional) Personalice la apariencia y la posición del botón al configurar sus propiedades. Sugerencias simples incluyen:
    • Establece la propiedad Texto a Mejorar salto (5 monedas) .
    • Establece la propiedad TextSize a 25 .
    • Establece AnchorPoint a 1, 1 y posición en 1, 0,1, 0 para mover el botón hacia la esquina inferior derecha.

Añadirás el botón a la interfaz de usuario del jugador más tarde en este tutorial, pero antes de hacerlo, necesitas definir toda la lógica y los datos que se requieren para que el botón funcione.

Definir los datos de salto

Actualmente, solo se almacena el número de monedas para cada jugador en el script del módulo PlayerData . También necesitas almacenar y actualizar el poder de salto en la misma manera. Debido a que las funciones en PlayerData son no específicas para los datos que se cambian, todo lo que se necesita para almacenar el poder de salto del jugador es agregar una llave de

Para actualizar el módulo de script PlayerData para almacenar el poder de salto:

  1. En la ventana Explorer , abra el script del módulo PlayerData en ServerStorage .

  2. Reemplace el código en el script con el siguiente ejemplo, que inicializa un valor de Jump para cada jugador junto con su valor de Coins existente:


    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

Actualizar los datos de salto

Ahora que PlayerData es capaz de rastrear el poder de salto, necesitas implementar lógica en el servidor para actualizar el poder de salto desde la solicitud del cliente del jugador.

El servidor y el cliente pueden comunicarse a través de cualquier Evento remoto o Función remota. Los eventos remotos no se generan cuando se disparan y son apropiados para una comunicación unidireccional. Las funciones remotas se generan hasta que reciban una respuesta, lo que permite una comunicación de un solo sentido. En este caso, el cliente necesita saber si el servidor ha actualizado con éxito la potencia de salto del jugador, por lo que una fun

Para implementar la mejora de salto:

  1. En la ventana Explorer , abra la carpeta Instancias en ReplicatedStorage .

  2. Inserta una Función remota en la carpeta Instancias , luego renombra la función remota a 1> Función de salto增量1> . Siempre creas funciones remotas en 4> Almacenamiento Replicado4> porque tanto el cliente como el servidor deben poder acceder a ellas.

    Studio's Explorer window with the IncreaseJumpPowerFunction script highlighted under the Instances folder.
  3. En la ventana Explorador , seleccione IniciarJuego .

  4. En la ventana Propiedades , habilita la propiedad CharacterUseJumpPower por defecto. Por defecto, el valor de salto de un personaje no define la cantidad que un personaje salta, por lo que esto debe estar habilitado.

  5. En la ventana Explorer, inserta un nuevo script en ServerScriptService, luego renombra el script a JumpService. Este script contendrá la lógica para las mejoras de salto.

  6. Reemplace el código predeterminado con el siguiente código:


    -- Servicios
    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local ServerStorage = game:GetService("ServerStorage")
    local Players = game:GetService("Players")
    -- Módulos
    local Leaderboard = require(ServerStorage.Leaderboard)
    local PlayerData = require(ServerStorage.PlayerData)
    -- Eventos
    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)
    -- Actualizar la tabla de potencia de salto
    local newJumpPower = PlayerData.updateValue(player, JUMP_KEY_NAME, updateFunction)
    -- Actualizar la potencia de salto de los jugadores
    local character = player.Character or player.CharacterAdded:Wait()
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    humanoid.JumpPower = newJumpPower
    -- Actualizar la tabla de clasificación de salto
    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
    -- Aumentar la potencia de salto del jugador
    updateJumpPower(player, function(oldJumpPower)
    oldJumpPower = oldJumpPower or 0
    return oldJumpPower + JUMP_POWER_INCREMENT
    end)
    -- Actualizar la tabla de monedas
    local newCoinAmount = PlayerData.updateValue(player, COIN_KEY_NAME, function(oldCoinAmount)
    return oldCoinAmount - JUMP_COIN_COST
    end)
    -- Actualizar la tabla de clasificación de monedas
    Leaderboard.setStat(player, COIN_KEY_NAME, newCoinAmount)
    return true
    end
    local function onCharacterAdded(player)
    -- Restablecer el poder de salto del jugador cuando se agrega el personaje
    updateJumpPower(player, function(_)
    return 0
    end)
    end
    -- Inicialice cualquier jugador agregado antes de conectarse al evento PlayerAdded
    for _, player in Players:GetPlayers() do
    onCharacterAdded(player)
    end
    -- Inicialización normal de los jugadores del evento 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)

    Las siguientes secciones describen el código con más detalle.

    • Actualiza los datos de salto del jugador y la tabla de clasificación para proporcionar opiniónvisuales. Esta función se parece al código que da

    • Validar solicitudes del servidor - onPurchaseJumpIncrease() primero comprueba que el jugador tenga realmente el número de monedas requeridas para comprar la mejora. Todas las solicitudes de los clientes al servidor deben ser válidas para evitar que los actores maliciosos envíen solicitudes falsas y exploten su experiencia.

Añadir el Botón a la Interfaz gráfica (o GUI)del Jugador

Un objeto ScreenGui solo se muestra en la pantalla si está vinculado a un objeto de un jugador a su objeto PlayerGui por defecto. Por defecto, esto contiene el sistema GUI como la ventana de chat. Ahora necesitas crear un script en ReplicatedStorage para copiar el botón de actualización en cada jugador y implementar el comportamiento para cuando se presiona.

Para agregar el botón a la GUI del jugador cuando se unan:

  1. En la ventana Explorer , crea un Script en ReplicatedStorage .

  2. Seleccione el script, luego en la ventana Propiedades ,

    1. Establece Nombre a JumpButtonClickHandler .
    2. Establece RunContext en Cliente . Esto le dice al motor que siempre se ejecuta este script en el cliente para optimizar la comunicación de red.
  3. En el script abierto, reemplace el código por defecto con el siguiente código:


    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
    -- la compra será el mensaje de error si el éxito es falso
    error(purchased)
    elseif success and not purchased then
    warn("Not enough coins!")
    end
    end
    jumpButton.Activated:Connect(onButtonClicked)
    -- Agregue el JumpPurchaseGui a la GUI del jugador
    jumpPurchaseGui.Parent = playerGui

    Las siguientes secciones describen el código con más detalle.

    • Obtener referencias a la GUI y la función del servidor - Las variables IncreaseJumpPowerFunction , jumpPurchaseGui y 0> jumpButton0> contienen referencias a la función y GUI que llaman la función que necesitarás más tarde.
    • Defina el eventoHANDLER - onButtonClicked() define lógica para cuando los usuarios hacen clic en el botón de actualización. Usa pcall() (llamada protegida) para invocar el 0> Class.RemoteFunction0> . Cualquier com
    • Conecta el controlador al botón - El evento Activated es compatible en todas las plataformas, incluidos el ratón, la pantalla táctil o los contextos de juego. Se activa cuando se hace un clic, toca o hace un clic en el botón de juego.

Probar

Ahora deberías poder comprar mejoras de salto por monedas usando el botón de mejora. Para probar el proyecto:

  1. En la barra de menú, haz clic en el botón Reproducir . Studio entra en modo de prueba de juego.

    Studio's Home tab with the Play button highlighted in the menu bar.
  2. Si sus scripts están funcionando correctamente, un botón para comprar potencia de salto aparece en la pantalla. Intenta hacer clic en el botón antes de recolectar monedas para asegurarte de que no te otorga potencia de salto adicional, luego intenta recolectar monedas y ver si la mejora funciona cuando haces clic de nuevo.

Ahora que el código está completo, intenta equilibrar el juego a través de la cantidad y las posiciones de las monedas. Añade más monedas si el juego se siente demasiado lento, o sustrar monedas y ponerlas en lugares desafiantes si se siente demasiado rápido y fácil.