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):
- 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.
- Añade un objeto ScreenGUI a la carpeta Instances.
- Seleccione el objeto ScreenGUI y, en la ventana Propiedades ,
- Establece Nombre a JumpPurchaseGui .
- Desactivar Restablecer en el spawn para asegurar que la GUI se mantenga padreada al jugador cuando reaparezca.
- En la ventana Explorer , inserta un TextButton en el contenedor JumpPurchaseGui , luego renombra el botón de texto a 1> JumpButton1> .
- (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:
En la ventana Explorer , abra el script del módulo PlayerData en ServerStorage .
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_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
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:
En la ventana Explorer , abra la carpeta Instancias en ReplicatedStorage .
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.
En la ventana Explorador , seleccione IniciarJuego .
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.
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.
Reemplace el código predeterminado con el siguiente código:
-- Servicioslocal ReplicatedStorage = game:GetService("ReplicatedStorage")local ServerStorage = game:GetService("ServerStorage")local Players = game:GetService("Players")-- Móduloslocal Leaderboard = require(ServerStorage.Leaderboard)local PlayerData = require(ServerStorage.PlayerData)-- Eventoslocal 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)-- Actualizar la tabla de potencia de saltolocal newJumpPower = PlayerData.updateValue(player, JUMP_KEY_NAME, updateFunction)-- Actualizar la potencia de salto de los jugadoreslocal character = player.Character or player.CharacterAdded:Wait()local humanoid = character:FindFirstChildWhichIsA("Humanoid")if humanoid thenhumanoid.JumpPower = newJumpPower-- Actualizar la tabla de clasificación de saltoLeaderboard.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-- Aumentar la potencia de salto del jugadorupdateJumpPower(player, function(oldJumpPower)oldJumpPower = oldJumpPower or 0return oldJumpPower + JUMP_POWER_INCREMENTend)-- Actualizar la tabla de monedaslocal newCoinAmount = PlayerData.updateValue(player, COIN_KEY_NAME, function(oldCoinAmount)return oldCoinAmount - JUMP_COIN_COSTend)-- Actualizar la tabla de clasificación de monedasLeaderboard.setStat(player, COIN_KEY_NAME, newCoinAmount)return trueendlocal function onCharacterAdded(player)-- Restablecer el poder de salto del jugador cuando se agrega el personajeupdateJumpPower(player, function(_)return 0end)end-- Inicialice cualquier jugador agregado antes de conectarse al evento PlayerAddedfor _, player in Players:GetPlayers() doonCharacterAdded(player)end-- Inicialización normal de los jugadores del evento 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)Explicación del códigoLas 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:
En la ventana Explorer , crea un Script en ReplicatedStorage .
Seleccione el script, luego en la ventana Propiedades ,
- Establece Nombre a JumpButtonClickHandler .
- 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.
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.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-- la compra será el mensaje de error si el éxito es falsoerror(purchased)elseif success and not purchased thenwarn("Not enough coins!")endendjumpButton.Activated:Connect(onButtonClicked)-- Agregue el JumpPurchaseGui a la GUI del jugadorjumpPurchaseGui.Parent = playerGuiExplicación del códigoLas 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:
En la barra de menú, haz clic en el botón Reproducir . Studio entra en modo de prueba de juego.
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.