Con el mapa creado, es hora de comenzar a construir los scripts.El resto de este curso se centrará en gran medida en la programación de todos los elementos diferentes del bucle del juego.
Configurar los scripts
La batalla real usará una combinación de scripts de módulo y scripts normales. A continuación se muestran los scripts y sus funciones.
Gestor de juegos | Script. Ejecuta funciones desde el administrador de partidos usando variables de la configuración del juego |
Gestor de partidos | Script de módulo. Ejecuta funciones como enviar jugadores a una arena o rastrear el tiempo en una coincidir. |
Configuración del juego | Script de módulo. Almacena variables comúnmente utilizadas utilizadas por otros scripts. |
scriptde configuración del juego
Crea un guión de módulo llamado GameSettings para almacenar variables utilizadas por otros scripts, como la duración de la partida y la interrupción.Estas variables se usarán por el script GameManager más tarde.
En Almacenamiento del servidor , crea una carpeta llamada ModuleScripts. En esa carpeta, crea un nuevo script de módulo llamado GameSettings.
Abre GameSettings y renombra la tabla de módulos para que coincida con el nombre del script.
local GameSettings = {}return GameSettingsEn la tabla de módulos, agregue variables para los siguientes usos. Toma tu mejor conjetura para cada valor, siempre puedes cambiarlo más tarde mientras pruebas.
- Duración de la intermisión - Segundos que esperan los jugadores antes de un coincidir.
- Duración del partido - Longitud de un partido en segundos.
- Mínimo de jugadores - Menor número de jugadores necesarios para iniciar.
- Tiempo de transición - Tiempo antes y después de una partida en segundos. Hace que la transición entre partes del ciclo del juego sea menos repentina.
local GameSettings = {}-- Variables de juegoGameSettings.intermissionDuration = 5GameSettings.matchDuration = 10GameSettings.minimumPlayers = 2GameSettings.transitionTime = 5return GameSettings
Guión scriptMatchManager
El segundo script conectado al GameManager es el MatchManager.Este script gestiona tareas como iniciar el temporizador o reiniciar a los jugadores una vez que termina el partido.
Dentro de MatchManager hay una función llamada prepareGame() que inicia el juego al hacer la transición de los jugadores al coincidir.
En ServerStorage > ModuleScripts > añade un guión de módulo llamado MatchManager. Renombra la tabla de módulos.
local MatchManager = {}return MatchManagerAñade una nueva función de módulo al MatchManager llamada prepareGame(). Incluye una declaración de impresión para probar el script más tarde.
local MatchManager = {}function MatchManager.prepareGame()print("Game starting!")endreturn MatchManager
Codifica el ciclo del juego
El ciclo de juego principal se codificará en el script de GameManager usando las variables acabadas de crear.Recuerde, hay tres fases en el ciclo de juego: intermisión, competición y limpieza y restablecer.
scriptdel administrador del juego
Este script es un script de servidor normal, así que ponlo en ServerScriptService, en lugar del directorio de scripts de módulo.El ciclo de juego real estará en un ciclo while true.
En ServerScriptService, crea un nuevo script llamado GameManager.
Añade una variable para el servicio "Almacenamiento del servidor", que es donde están los Modulescripts.A continuación, añade una variable para el servicio "Jugadores", que será necesaria para verificar el número de jugadores durante las interrupciones.
-- Servicioslocal ServerStorage = game:GetService("ServerStorage")local Players = game:GetService("Players")Para usar los módulos creados anteriormente:
- Establece una variable llamada moduleScripts en la ubicación de la carpeta de ModuleScripts.
- Añade variables llamadas matchManager y gameSettings. Establece cada variable para que requiera su respectivo script.
-- Servicioslocal ServerStorage = game:GetService("ServerStorage")local Players = game:GetService("Players")-- Scripts de módulolocal moduleScripts = ServerStorage:WaitForChild("ModuleScripts")local matchManager = require(moduleScripts:WaitForChild("MatchManager"))local gameSettings = require(moduleScripts:WaitForChild("GameSettings"))Después de las variables, agregue un bucle while true do . Todas las fases del bucle del juego irán dentro para repetirse indefinidamente.
-- Scripts de módulolocal moduleScripts = ServerStorage:WaitForChild("ModuleScripts")local matchManager = require(moduleScripts:WaitForChild("MatchManager"))local gameSettings = require(moduleScripts:WaitForChild("GameSettings"))-- Bucle de juego principalwhile true doend
Codifica la interrupción
Mientras que el ciclo de juego se ejecuta indefinidamente, el intermedio debe pausar el ciclo y solo continuar cuando haya suficientes jugadores para una coincidir.Para codificar esta pausa, incluye un bucle de repetición anidado para la interrupción en el bucle while.Ese bucle anidado se repetirá hasta que haya suficientes jugadores, pausando el bucle principal.Una vez que haya suficientes jugadores, saldrá y transitará a los jugadores a una coincidir.
Con un bucle de repetición , el código en el bucle se ejecutará al menos una vez.A diferencia de un bucle while, no comprueba su condición hasta que termine el bucle.Esto garantiza que los jugadores siempre vayan al vestíbulo antes de una coincidir.
En el bucle while true do, escriba repeat y presione Enter para completar automáticamente con la palabra clave until.
while true dorepeatuntilendCompruebe si el número actual de jugadores (#Players:GetPlayers()) es mayor o igual al variable minimumPlayers creada anteriormente en el módulo GameSettings.
while true dorepeatuntil #Players:GetPlayers() >= gameSettings.minimumPlayersendEn el bucle de repetición, agrega una declaración de impresión que dice que la interrupción está comenzando.Usa task.wait() para pausar por el intermedio usando intermissionDuration de GameSettings.
while true dorepeatprint("Starting intermission")task.wait(gameSettings.intermissionDuration)until #Players:GetPlayers() >= gameSettings.minimumPlayersendPrueba y comprueba que la declaración de impresión "Starting intermission" se muestra al menos dos veces.Ver el mensaje dos veces prueba que el bucle repetitivo no encontró suficientes jugadores y se ejecutó de nuevo.Tendrás que esperar la duración del intermedio antes de ver el mensaje una segunda vez.
Consejos de solución de problemas
En este punto, si no estás apareciendo como se pretendía, prueba uno de los siguientes a continuación.
- task.wait() debe estar dentro del bucle de repetición.Sin espera, el script se ejecutará demasiadas veces en un segundo, sobrecargando Roblox Studio y causando un error.
- En el módulo de configuración del juego, la variable intermissionDuration debe ser mayor que 1. Si es inferior, el script se puede repetir demasiado a menudo, causando problemas de ralentización.
Termina el intermedio
Una vez que haya suficientes jugadores, hazlos esperar un corto período de transición.Luego, envíelos al partido llamando a la función prepareGame() en MatchManager.Recuerde, que esa función solo imprime una línea, pero agregará más código más tarde.
Al final del ciclo de repetición, agrega una declaración de impresión que dice que la interrupción ha terminado para probar tu código.Luego, síguelo con una task.wait() usando la variable transitionTime de GameSetting.
while true dorepeatprint("Starting intermission")task.wait(gameSettings.intermissionDuration)until #Players:GetPlayers() >= gameSettings.minimumPlayersprint("Intermission over")task.wait(gameSettings.transitionTime)endDespués de la espera, llama al prepareGame() del módulo MatchManager.Cuando se ejecuta el código, esto solo imprimirá texto en la ventana de salida.Espere hasta la siguiente sección para probar este código.
while true dorepeatprint("Starting intermission")task.wait(gameSettings.intermissionDuration)until #Players:GetPlayers() >= gameSettings.minimumPlayersprint("Intermission over")task.wait(gameSettings.transitionTime)matchManager.prepareGame()end
Prueba juegos multijugador
En este momento, para que el código se ejecute prepareGame(), debe salir del bucle de repetición.Pero, para hacer eso, necesita haber más de un jugador.Esto significa que si usas el botón de prueba de juego, la función nunca se ejecutará porque eres el único jugador en el juego (a menos que tus jugadores mínimos sean uno).Para probar esto, necesitarás simular un juego multijugador.
Inicie un servidor local
Para probar el código que requiere más de un jugador, crea un servidor local.Si bien los juegos publicados normalmente están en los servidores de Roblox, un servidor local simula un juego multijugador en tu computadora con jugadores simulados.
Para iniciar un servidor local, en la pestaña Prueba > Clientes y servidores > establezca la lista desplegable del reproductor al número de jugadores en la variable mínima de jugadores de GameSetting.Esta lección usa a 2 jugadores.
Haga clic en Iniciar para comenzar el servidor.
Espere unos segundos para que el servidor se inicie.Se abrirán múltiples ventanas además de la ventana original de Studio.Es posible que deba permitir el acceso a Roblox Studio desde los cortafuegos u otro software de seguridad en línea.
Consejos de solución de problemas
En este punto, no puedes ver los servidores de prueba, prueba uno de los siguientes a continuación.
- Si tiene algún problema con el inicio del servidor, verifique dos veces el artículo Problemas de firewall y router.
- Establece el número de jugadores a una pequeña cantidad, como 2 o 3.
- Si el problema no se resuelve, intenta reiniciar Studio o reiniciar tu computadora.
Prueba en el servidor local
Verás múltiples ventanas cuando el servidor comience. Cada una representa una parte diferente de la relación servidor/cliente.
- Servidor (borde verde) ejecuta el juego.
- Cliente (borde azul) simula la experiencia de un jugador.


Con el servidor en marcha, puedes comprobar si el código funcionó.
Busque la ventana Servidor con el borde verde.Compruebe la declaración de impresión llamada desde el script de MatchManager.Debido a que hay un bucle de repetición, verás las mismas declaraciones de impresión repitiéndose.
Una vez que hayas terminado de probar, en cualquier ventana, cierra el servidor con el botón de Limpieza.Esto cierra todas las ventanas del servidor y del cliente y te devuelve a tu ventana normal de Studio.
Consejos de solución de problemas
En este punto, si las declaraciones de impresión previstas no aparecieron, prueba una de las siguientes opciones.
- Asegúrate de que las funciones como prepareGame() estén en el alcance del bucle while verdadero.
- Si la impresión desde MatchManager no funcionó, verifique algunos problemas comunes de solución con scripts de módulo, como asegurarse de que el script de MatchManager sea requerido en GameManager o que prepareGame() se agregue a la tabla de ese módulo.
Guiones completados
A continuación, se completan los scripts para verificar doblemente tu trabajo.
scriptdel administrador del juego
-- Servicioslocal ServerStorage = game:GetService("ServerStorage")local Players = game:GetService("Players")-- Scripts de módulolocal moduleScripts = ServerStorage:WaitForChild("ModuleScripts")local matchManager = require(moduleScripts:WaitForChild("MatchManager"))local gameSettings = require(moduleScripts:WaitForChild("GameSettings"))-- Bucle de juego principalwhile true dorepeatprint("Starting intermission")task.wait(gameSettings.intermissionDuration)until #Players:GetPlayers() >= gameSettings.minimumPlayersprint("Intermission over")task.wait(gameSettings.transitionTime)matchManager.prepareGame()end
Guión scriptMatchManager
local MatchManager = {}
function MatchManager.prepareGame()
print("Game starting!")
end
return MatchManager
scriptde configuración del juego
local GameSettings = {}-- Variables de juegoGameSettings.intermissionDuration = 5GameSettings.roundDuration = 10GameSettings.minimumPlayers = 2GameSettings.transitionTime = 5return GameSettings