Close
    Search Search

    Tutorial: guía avanzada para la creación de scripts

    Página de tutoriales Este artículo es un tutorial avanzado.Todos los tutoriales · Tutoriales de secuencias de comandos

    ¡Bienvenido a Advanced Scripting! Este tutorial se sumergirá en términos y conceptos más técnicos de la creación de scripts de Roblox. Aquí hay una revisión rápida de lo que hemos aprendido hasta ahora.

    • Variables: marcadores de posición para datos
    • Booleanos: declaraciones verdaderas / falsas
    • Valores de cadena: valores de texto
    • Propiedades: atributos de un objeto
    • Funciones: marcadores de posición para el código
    • Padre: el objeto directamente encima de otro objeto en la ventana del Explorador
    • Niño: el objeto directamente debajo de otro objeto en la ventana del Explorador
    • Declaración If: una declaración que ejecuta código si se cumple una condición
    • Else: una declaración que ejecuta código si no se cumple una condición
    • Elseif: una declaración que ejecuta código si no se cumple una primera condición pero sí una segunda.
    • Tablas / índices: un conjunto de valores múltiples.
    • While Loops: una declaración que ejecuta código una y otra vez infinitamente siempre que se cumpla una condición.
    • For Loops: una declaración que ejecuta código una y otra vez durante un número determinado de veces.
    • In Pairs Loops: una declaración que ejecuta código que se aplica a una tabla determinada.
    • Funciones integradas: una función ya realizada por Roblox.

    Contenido

    Valores

    Hasta ahora, hemos aprendido que no puede acceder a variables de otros scripts. Pero, ¿y si es necesario? Puede utilizar un valor. Estas son variables que no están dentro de una secuencia de comandos, pero se agregan a la ventana del explorador. Puede hacer esto insertándolo en una pieza. Hay varios tipos de valores, pero entiendes la idea. Para acceder a él, simplemente haga referencia a él como lo haría con una parte.





    • Tutorial: guía avanzada para la creación de scriptsTutorial: guía avanzada para la creación de scripts Espacio de trabajo
      • Tutorial: guía avanzada para la creación de scriptsTutorial: guía avanzada para la creación de scripts Parte
        • Tutorial: guía avanzada para la creación de scriptsTutorial: guía avanzada para la creación de scripts Guión
        • Tutorial: guía avanzada para la creación de scripts BoolValue

    Para establecer el valor en un script, cambie su Ahorro propiedad.

    1 script.Parent.BoolValue.Value = falso

    Un error extremadamente común que se comete al establecer valores es que los desarrolladores a menudo se olvidan de agregar ".Value" a su script. Esto es necesario porque es la propiedad Value la que está intentando establecer.

    Hay varios tipos de valores: BoolValues, StringValues, IntValues, NumberValuesy CframeValues.

    Ahora, aquí está la cuestión: si algo tiene muchos objetos de valor, por el bien de la organización, nos gusta poner esto en un Carpeta de configuración.

    • Tutorial: guía avanzada para la creación de scriptsTutorial: guía avanzada para la creación de scripts Parte
      • Tutorial: guía avanzada para la creación de scriptsTutorial: guía avanzada para la creación de scripts Configuración
        • Tutorial: guía avanzada para la creación de scripts BoolValue
        • Tutorial: guía avanzada para la creación de scripts Valor de cadena
        • Tutorial: guía avanzada para la creación de scripts IntValue

    Por supuesto, como las carpetas normales, esto es completamente opcional, pero si eliges usarlo tienes que hacer una ruta como esta:

    1 juego.Workspace.Part.Configuration.BoolValue.Value = false

    Líderes

    Digamos que estabas haciendo Monopoly en Roblox y querías hacer una tabla de clasificación en la parte superior derecha de tu juego para registrar los cuadrados y el efectivo de los jugadores. Comience por hacer la tabla de clasificación agregando una carpeta llamada liderestats vinculado a un jugador cada vez que se unió. Usamos el Jugador añadido evento en el JUGADORES .


    • Tutorial: guía avanzada para la creación de scriptsTutorial: guía avanzada para la creación de scripts ServerScriptService
      • Tutorial: guía avanzada para la creación de scripts Guión

    1 juego.Players.PlayerAdded: Connect (función (jugador) 2 Líderes locales = Instance.new ("Carpeta") 3 Líderes.Nombre = "Líderes" 4 Líderes.Parent = jugador 5 final)

    Tenga en cuenta que el nombre de la carpeta deberán ser "líderes de estado"; Roblox no aceptará ninguna otra variación.


    Ahora simplemente agregue IntValues, StringValues, NumberValues y BoolValues para hacer estadísticas reales.

    Queremos hacer estadísticas para la casilla actual en la que se encuentra el jugador, así como la cantidad de efectivo entregada. A Valor de cadena funcionaría mejor para la ubicación, y un IntValue funcionaría mejor para la cantidad de efectivo, asumiendo que no desea utilizar un signo de dólar ($) en las estadísticas.

    Entonces, creamos ambos valores usando el .nuevo constructor, luego cambie su Nombre y Padre.

    1 game.Players.PlayerAdded: Connect (función (jugador) 2 Leaderstats locales = Instance.new ("Carpeta") 3 Leaderstats.Name = "Leaderstats" 4 Leaderstats.Parent = jugador 5 6 Local Cash = Instance.new ("IntValue ") 7 Cash.Name =" Cash "8 Cash.Parent = Leaderstats 9 10 Local Location = Instance.new (" StringValue ") 11 Location.Name =" Location "12 Location.Parent = Leaderstats 13 end)

    Ahora, tradicionalmente, en Monopoly, comenzamos en "GO" y recibimos $ 1500. Entonces, estableces su Ahorro propiedad.

    1 game.Players.PlayerAdded: Connect (función (jugador) 2 Leaderstats locales = Instance.new ("Carpeta") 3 Leaderstats.Name = "Leaderstats" 4 Leaderstats.Parent = jugador 5 6 Local Cash = Instance.new ("IntValue ") 7 Cash.Name =" Cash "8 Cash.Value = 1500 9 Cash.Parent = Leaderstats 10 11 Local Location = Instance.new (" StringValue ") 12 Location.Name =" Location "13 Location.Value =" GO "14 Location.Parent = Leaderstats 15 end)


    Por supuesto, necesitaría agregar manualmente ubicaciones de aparición en GO para que los jugadores aparezcan allí, pero diría GO en la tabla de clasificación independientemente.


    ClickDetectors

    Para las partes, un detector de clic es un detector para cuando el jugador pasa el cursor sobre él. Para agregar uno, simplemente insértelo en la parte, y si prueba el juego, puede ver que el cursor cambia cada vez que pasa el mouse sobre él. Sin embargo, no pasa nada. Esto se debe a que nunca lo escribiste para hacer nada. Así que inserte un script en ClickDetector:

    • Tutorial: guía avanzada para la creación de scriptsTutorial: guía avanzada para la creación de scripts Espacio de trabajo
      • Tutorial: guía avanzada para la creación de scriptsTutorial: guía avanzada para la creación de scripts Parte
        • Tutorial: guía avanzada para la creación de scriptsTutorial: guía avanzada para la creación de scripts ClickDetector
          • Tutorial: guía avanzada para la creación de scriptsTutorial: guía avanzada para la creación de scripts Guión

    1 script.Parent.MouseClick: Connect (function () 2 print ("parte clicada") 3 end)

    Cuando hace clic con el botón izquierdo en la pieza, está activando la Clic del mouse evento. Por lo tanto, está conectado a la función que imprime "parte en la que se hizo clic".

    Enumerar

    Enumerar, corto para enumeración, es un tipo de datos que toma uno de un conjunto de valores. En la ventana Propiedades, una propiedad que usa Enum estaría representada por un menú desplegable. Por una parte, el Forma y Material ambas propiedades usan Enum.

    1 script.Parent.Material = Enum.Material.Neon

    Esta es una alternativa a poner "Neon" en cadenas. Esto puede ser opcional para cosas como Material, pero es necesario para cosas como EasingStyle, que explicaremos más adelante.

    ScreenGuis

    A ScreenGui representa interfaz gráfica de usuario de pantalla. Para aquellos que no son tan conocedores de la tecnología, es básicamente como una pegatina colocada en la pantalla que es no parte del espacio tridimensional. Como tal, nunca se colocan en el espacio de trabajo. Se colocan en StarterGui. Así que agregue un ScreenGui, y verá que debería aparecer una pestaña llamada UI en la parte superior. Haga clic en esa pestaña y verá varias interfaces de usuario, como botones de texto, etiquetas de imágenes y más. Diseñe la GUI tanto como desee.

    • Tutorial: guía avanzada para la creación de scriptsTutorial: guía avanzada para la creación de scripts StarterGui
      • Tutorial: guía avanzada para la creación de scriptsTutorial: guía avanzada para la creación de scripts ScreenGui
        • Tutorial: guía avanzada para la creación de scripts TextButton
        • Tutorial: guía avanzada para la creación de scripts ImageLabel
        • Tutorial: guía avanzada para la creación de scripts Marco

    Si desea saber cómo cambiar la posición y el tamaño usando las propiedades en lugar de arrastrar, lea aquí.

    El modelo cliente-servidor

    El modelo cliente-servidor es una forma en que Roblox administra sus juegos.

    Un "servidor" es una especie de computadora / sistema poderoso que controla todos los eventos que ocurren en un juego. También gestiona a todos los jugadores de un juego.

    El "cliente" es el dispositivo de cada usuario individual.

    Replicación

    Todos sabemos que se produce un cambio en un juego cada vez que se cambia una propiedad, o cuando se crea o destruye una instancia. Hay dos tipos de cambios: uno del lado del servidor y otro del lado del cliente. Uno del lado del servidor es cuando se produce el cambio en el servidor (todos los jugadores experimentan este cambio), mientras que un cambio del lado del cliente se produce en un cliente específico (solo un jugador nota este cambio). Cuando usa una secuencia de comandos normal, este código provoca cambios en el servidor.

    Automáticamente, los cambios del lado del servidor se replican en el cliente: lo que esto significa es que cuando se produce un cambio del lado del servidor, el mismo cambio se produce en el cliente.

    FilteringEnabled

    Aquí es donde las cosas se complican: si observa las propiedades del espacio de trabajo, encontrará un booleano titulado FilteringEnabled. Lo que esto significa es que, si bien los cambios del lado del servidor se pueden replicar en el cliente, un cambio del lado del cliente no se puede replicar en el servidor. Esto sirve como una especie de precaución de seguridad en el juego: si un explotador hackea el juego y realiza cambios maliciosos, este cambio no se producirá en los demás jugadores del juego. Tenga en cuenta que ya no puede deshabilitar esta propiedad; se impuso en 2018.

    Scripts locales

    A guión local es un script que solo afectará al lado del cliente. Son especialmente útiles para cosas como UserInputService y ScreenGuis. Entonces, si un jugador hiciera clic en un botón que genera teteras, si se usa un script local, solo ese jugador verá las teteras.

    Intentemos usarlo para hacer que un botón imprima texto cada vez que se hace clic en él. Si aún no lo ha hecho, cree un ScreenGui con un TextButton o un ImageButton. Debido a que solo los clientes ven ScreenGuis, siempre use scripts locales en ScreenGuis. En el botón, inserte el siguiente código en un script local:

    • Tutorial: guía avanzada para la creación de scriptsTutorial: guía avanzada para la creación de scripts StarterGui
      • Tutorial: guía avanzada para la creación de scriptsTutorial: guía avanzada para la creación de scripts ScreenGui
        • Tutorial: guía avanzada para la creación de scripts TextButton

    1 script.Parent.Activated: Connect (function () 2 print ("Se hizo clic en el botón") 3 end)

    El evento Activado se dispara cada vez que el usuario dispara el botón izquierdo del mouse sobre el botón. Ahora, imprimirá texto cada vez que se haga clic en él.

    Nota: Estos scripts NO PUEDEN utilizarse en el espacio de trabajo. No pasará nada si lo intentas.

    jugador-jugador-contra-personaje-contra-humanoide">Objetos de jugador: jugador contra personaje contra humanoide

    Una cosa que debe comprender antes de continuar es una jugador objeto. Cuando un jugador se une a un juego, se crean dos objetos en el Explorador.

    Caracter

    Se crea un modelo en el espacio de trabajo, que administra la apariencia física de su cuerpo y las prendas de vestir. Hay dos tipos de caracteres: R6 (seis articulaciones) o R15 (quince articulaciones). Esto se denomina "personaje."

    Para uso futuro, veamos cómo construir un carácter en blanco. En la pestaña Complementos, hay una opción llamada "Rig Builder". Elija el número de articulaciones que desee y elija el tipo de personaje que desee. Esto producirá un carácter gris en blanco en el espacio de trabajo, también conocido como plataforma.

    Humanoide

    Todos los jugadores obtendrán un objeto humanoide, que es parental del personaje. Piense en ello como una etiqueta de identificación para que pueda verificar si algo es humano o un NPC. Es por eso que cuando usa un kill brick, usa este código:

    1 script.Parent.Touchched: Connect (función (hit) 2 local hum = hit.Parent: FindFirstChild ("Humanoid") 3 if hum, luego 4 hum.Health = 0 5 end 6 end)

    Esto verificaría si se golpea. El padre (el personaje) tiene un objeto humanoide. Encontremos una manera de hacer un movimiento de NPC. Para una parte normal, necesitaríamos usar un bucle for para que se mueva. Sin embargo, para objetos con humanoides, podemos usar la función MoveTo para moverlos a un ritmo normal.

    1 zumbido local = script.Parent.Humanoid 2 zumbido: MoveTo (game.Workspace.EndPart.Position)

    Esto moverá al humano a la parte llamada "EndPart" en el área de trabajo. También puede usar coordenadas como esta:

    1 zumbido local = script.Parent.Humanoide 2 zumbido: MoveTo (Vector3.new (x, y, z))

    Recuerde, cada vez que use coordenadas, debe usar CFrame.new o Vector3.new.

    jugador

    Un objeto de jugador es un objeto que se crea en el servicio de Jugadores que administra cosas como el ID de jugador y la Mochila.

    Entonces, averigüemos cómo encontrar el objeto de jugador correspondiente de su personaje. Usamos la función GetPlayerFromCharacter () para encontrar el objeto del jugador ingresando el modelo del personaje.

    1 script.Parent.Touched: Connect (function (hit) 2 local plr = game.Players: GetPlayerFromCharacter (hit.Parent) 3 if plr ~ = nil then 4 print (plr.Name) 5 end 6 end)

    Este guión dispararía el nombre del jugador que tocó la pieza.

    ¿Cómo encontramos el personaje del objeto jugador? Hay un Caracter propiedad del objeto Player que mostraría el modelo de personaje correspondiente.

    Eventos remotos

    Entonces, con FilteringEnabled, ¿qué sucede si necesita hacer algo como hacer que aparezca un ScreenGui cuando se toca una parte? Bueno, agrega un control remoto. Hay dos tipos de controles remotos: eventos remotos y funciones remotas. Todas estas son funciones que se activan en el lado del cliente. Siempre se almacenan en ReplicatedStorage. Para disparar un RemoteEvent, ingrese el siguiente código:

    1 script.Parent.Touched: Connect (función (hit) 2 Humanoid local = hit.Parent: FindFirstChild ("Humanoid") 3 si Humanoid luego 4 jugador local = game.Players: GetPlayerFromCharacter (hit.Parent) 5 game.ReplicatedStorage. RemoteEvent: FireClient (jugador) 6 final 7 final)

    Entonces hay muchos términos nuevos aquí. "golpear" se refiere a la parte que tocó la parte; en este caso, lo más probable es que sea el pie del jugador. El padre se refiere al padre del pie, también conocido como el personaje. La segunda línea verifica si el personaje tiene o no un objeto humanoide: en otras palabras, verifica si fue un jugador el que tocó el objeto.

    La tercera línea verifica si la variable Humanoide es verdadera o falsa. Un valor "falso" es falso o nulo, y todo lo demás es un valor de verdad. Si el Humanoide no existe, la variable sería nula; por lo tanto, sería falso y no cumpliría la condición.

    Ahora, inserte un script local en StarterGui e ingrese lo siguiente.

    1 juego.ReplicatedStorage.OnClientEvent: Connect (function () 2 game.StarterGui.ScreenGui.Enabled = true 3 end)

    He creado un oyente, también conocido como OnClientEvent, que habilitaría ScreenGui cuando se toca la pieza.

    Funciones remotas

    Las funciones remotas se parecen mucho a los eventos remotos, solo que le permiten devolver una variable.

    Entonces, en lugar de decir "FireClient", decimos "InvokeClient".

    1 script.Parent.Touched: Connect (función (hit) 2 Humanoid local = hit.Parent: FindFirstChild ("Humanoid") 3 si Humanoid luego 4 jugador local = game.Players: GetPlayerFromCharacter (hit.Parent) 5 game.ReplicatedStorage. RemoteFunction: InvokeClient (jugador) 6 final 7 final)

    Además, el oyente en StarterGui es un poco diferente.

    1 función local OpenGui () 2 game.StarterGui.ScreenGui.Enabled = true 3 end 4 game.ReplicatedStorage.RemoteFunction.OnClientInvoke = OpenGui

    Usamos un signo igual en lugar de una función Connect.

    Pero, ¿cuál es la diferencia entre InvokeServer e InvokeClient? FireServer y FireClient? Bueno, cuando desea afectar algo en el lado del servidor desde un script local (es decir, desea que aparezca un bloque cuando hace clic en una GUI), entonces usa Invoke / Fire Server. Cuando desee afectar algo en el lado del cliente usando un script de servidor, use Invoke / Fire Client.

    Partes de un CFrame

    Un tipo de datos del que es posible que aún no haya aprendido es un CFrame. Cada parte tiene un CFrame. Cada CFrame se compone de 12 números. Los primeros 3 números son la posición de la pieza. Los otros 9 valores son para rotación, pero no establecemos estos valores directamente. Así es como configurar la posición y orientación de una pieza:

    1 script.Parent.Position = Vector3.new (0,0,0) - Establece la posición. 2 script.Parent.Position = CFrame.new (0,0,0) --También establece la posición. 3 script.Parent.Orientation = CFrame.Angles (0, math.rad (45), 0) - Establece la orientación.

    El math.rad convertidor convertirá grados a radianes. Entonces, si dijera math.rad (45), el sistema convertirá 45 grados a radianes, aproximadamente 0.78 radianes.

    Tutorial: guía avanzada para la creación de scripts

    Un radianes

    Para ser claros, un radianes es una unidad de medida que mide alrededor de 57.3 °, o poco menos de 1/6 de un círculo completo. Básicamente, es una pequeña porción de pizza donde todos los lados son iguales.

    Otras operaciones matemáticas

    Puede que esté familiarizado con los operadores aritméticos básicos, pero hay otros más avanzados como math.rad. Aquí están la mayoría de ellos.

    • math.abs (x): encuentra el valor absoluto de x
    • math.sin (x): encuentra la razón sinusoidal de x
    • math.cos (x): encuentra la razón de coseno de x
    • math.tan (x): encuentra la razón de la tangente de x
    • math.floor (x): redondea x hacia abajo al número entero más cercano
    • math.ceil (x): redondea x hacia arriba al número entero más cercano
    • math.rad (x): convierte ángulos a radianes.
    • math.pow (x, y): encuentra x ^ y.
    • math.sqrt (x): encuentra la raíz cuadrada de x.
    • math.random (x, y): elige un número entero aleatorio entre xey.
    • math.deg (x): convierte radianes a grados.

    Es posible que no esté familiarizado con muchos de estos, pero los aprenderá en matemáticas de la escuela secundaria más adelante.

    DataStoreService

    Una de las últimas cosas que debes aprender para hacer un juego completamente funcional es guardar los datos de los jugadores. Haría esto usando DataStoreService. Por supuesto, no aparece en el Explorador, por lo que debe usar GetService ().

    1 DataStoreService local = juego: GetService ("DataStoreService") 2 Local DataStore = DataStoreService: GetDataStore ("FirstDataStore")

    Un almacén de datos es un lugar donde se almacenan los datos mientras el reproductor está desconectado. Cuando usa la función GetDataStore (), el primer parámetro es el nombre que le da al almacén de datos.

    Ahora necesitamos realmente guardar los datos de los jugadores. Reutilicemos el ejemplo de Monopoly de la sección Leaderstats. En la parte inferior de su secuencia de comandos, agrega un evento PlayerRemoving.

    1 game.Players.PlayerRemoving: Connect (function (player) 2 local UserID = "Player _" .. player.UserId 3 local Cash = player.leaderstats.Cash 4 DataStore: SetAsync (UserID, Cash) 5 end

    Algunos términos nuevos aquí. Cuando coloca dos puntos entre dos tipos de datos, los está "concatenando", es decir, formarlos juntos en una sola cadena. La función SetAsync guarda los datos del jugador en el almacén de datos.

    Sin embargo, existe un problema. Guardar los datos de los jugadores es un proceso arriesgado y cosas como una mala conexión podrían romper el guión. Entonces, para evitar que esto suceda, es importante colocar una función pcall en el script. Esto haría que la secuencia de comandos omita el código en caso de que falle y continúe.

    1 game.Players.PlayerRemoving: Connect (function (player) 2 local UserID = "Player _" .. player.UserId 3 local Cash = player.leaderstats.Cash 4 local Success, Failure = pcall (function () 5 DataStore: SetAsync ( ID de usuario, efectivo) 6 final) 7 si tiene éxito, entonces 8 imprime ("Datos almacenados correctamente") 9 más 10 imprime ("Fallo") 11 final 12 final)

    Permíteme explicarte. "Success" es un valor booleano y "Failure" es el mensaje de error en caso de que falle. Si el almacén de datos se guarda correctamente, Success se establecerá en verdadero. Cumplirá con la condición de la declaración if que se encuentra debajo e imprimirá "Datos guardados correctamente".

    Si el guardado de datos falla, ya sea por mala conectividad o lo que sea, Success se convertirá en falso y no cumplirá la condición de la declaración if a continuación. La función warn () es como la función print (), solo que imprime en naranja. Por lo tanto, imprimirá el mensaje de error en naranja si falla el guardado de datos.

    Técnicas básicas de depuración

    Cuando crea scripts, inevitablemente se encontrará con errores. Estos son errores en su código que dan un resultado no deseado. Lo importante es no darse por vencido, ya que todos los errores son, de alguna manera, solucionables. Hay tres tipos principales de errores.

    Errores de sintaxis

    Los errores de sintaxis son errores menores, generalmente fáciles de corregir, que ocurren cada vez que un jugador comete errores tipográficos accidentalmente en el script. En inglés, sería como decir "I am boy". Está mal, porque falta el artículo. En Roblox Lua, sería como el siguiente guión. Vea si puede detectar lo que está mal en este script:

    1 script.Parent.Touchched: Connect (función (pulsación) 2 print ("Part Touchched") 3 final

    En este código, si observa, la etiqueta de cierre no tiene corchetes de cierre. Estos son importantes para los eventos.

    1 humanoide local = hit.Parent.FindFirstChild ("Humanoide")

    Suponiendo que 'hit' fue el parámetro para un evento Tocado, este código verifica si la cosa que tocó la pieza era humana o no. Sin embargo, notará que después de "Padre" hay un punto. FindFirstChild es una función, por lo tanto, debe tener dos puntos, no un punto.

    Errores semánticos

    Estos son un poco más difíciles de atrapar. Estos ocurren cuando la sintaxis es correcta, pero en contexto, el código no tiene sentido. En inglés, sería como decir "Soy profesor universitario". Aunque es gramaticalmente correcto, todavía no tiene sentido. Aquí hay un ejemplo que intenta hacer invisible la Parte 1.

    1 juego.Workspace.Part1.Tranparency = "lol"

    Esto no funciona, porque la propiedad Transparencia es un valor flotante, no una cadena. Además, la transparencia no está escrita correctamente.

    Los errores de ejecución

    Estos son más difíciles de atrapar. Esto ocurre cuando el script tiene perfecto sentido, pero por alguna razón aún no puede realizar la operación. El ejemplo más famoso de un error en tiempo de ejecución es este:

    1 impresión (1/0)

    Es matemáticamente imposible dividir 1 entre 0, por lo que el sistema no puede imprimirlo. Aquí hay un ejemplo más específico de Roblox:

    1 script.Parent.Touched: Connect (function () 2 game.StarterGui.InventoryGui.Enabled = true 3 end)

    A primera vista, no aparecerían errores. Sin embargo, no sucederá nada si toca la pieza y no recibirá un mensaje de error. Esto se debe a FilteringEnabled, no puede hacer que la GUI aparezca en una secuencia de comandos del servidor. El juego simplemente se negará a realizar la operación.

    Comprobaciones automatizadas de sintaxis

    La mayoría de las veces, si tiene un error de sintaxis / semántico en su script, el sistema lo encontrará automáticamente y el error específico se resaltará en rojo o azul. Al pasar el cursor sobre estas palabras, aparecerá una información sobre herramientas con una breve explicación.

    Entonces, si tuviera que escribir este código:

    1 base de datos local =

    La línea estaría subrayada en rojo o azul, y al pasar el cursor sobre el texto diría esto: Declaración incompleta: asignación esperada o llamada de función. Para corregir el error, iría y asignaría un valor o eliminaría el signo igual.

    La ventana de salida

    A veces, simplemente no notas el error a primera vista y entras al juego sin solucionarlo. Por lo tanto, obtendría un texto rojo en negrita en la ventana de salida que explica el error. Hacer clic en el mensaje lo llevará directamente al script con la línea de error resaltada.

    Imprimir declaraciones

    A veces, la ventana de salida no mostraba nada, aunque el script no se ejecutara correctamente. Digamos que quería ingresar este código:

    1 IntValue local = script.Parent.IntValue 2 si IntValue> = 1 luego 3 print ("IntValue es mayor que 1") 4 end)

    El código no se imprimirá, incluso si IntValue se estableció en un valor superior a 1. Quizás fue algo en la primera línea que no se ejecutó correctamente. Agregar una declaración de impresión como esta probaría si la primera línea funcionó:

    1 IntValue local = script.Parent.IntValue 2 print (1) 3 si IntValue> = 1 luego 4 print ("IntValue es mayor que 1") 5 end)

    Prueba el juego. Podía ver "1" publicado en la ventana Salida, por lo tanto, la línea 1 funcionó sin errores. Eso significa que el error estaba en la siguiente línea. El uso de declaraciones impresas ayuda a reducir qué línea tiene un error.

    El centro de desarrolladores

    El centro de desarrolladores es un depósito de información sobre todo lo relacionado con Roblox Studio. Si no está seguro de la causa del error, intente buscar los conceptos en el centro de desarrolladores.

    Digamos que no tengo ni idea de qué parámetros necesito incluir en una función TweenService: Create (). Luego, buscaría la función para encontrar la página específica, luego buscaría la sección de parámetros. Incluiría los parámetros, el tipo de datos de los parámetros y lo que devuelve.

    Por lo tanto, es una herramienta muy útil para encontrar soluciones a sus errores.

    El Devforum

    Pero, ¿qué pasa si el centro resulta ser demasiado técnico para que lo entiendas? A diferencia de los foros generales, los foros de desarrolladores existen hasta el día de hoy, para desarrolladores que buscan resolver sus propias preguntas de programación y las de otros. Si encuentra un error, es probable que otros se hayan encontrado con ese error. Busque el mensaje de error y consulte los foros para ver si alguien más ha resuelto su problema por usted.

    Digamos que se pregunta por qué no puede ver un TextLabel en SurfaceGui a través de una ventana. Búsquelo y encontrará rápidamente que puede resolver el problema simplemente cambiando el material de la ventana y / o aumentando la transparencia.

    El devforum no es el único foro para problemas de secuencias de comandos. Por ejemplo, si necesita publicar y aún no ha obtenido el rango de Miembro, simplemente vaya a scriptinghelpers.org, donde puede publicar siempre que vincule su cuenta de Roblox.

    Mensajes de error comunes

    A veces, los mensajes de error que aparecen en la ventana Salida son extremadamente crípticos y poco descriptivos, por lo que aquí hay una guía rápida que explica qué significan algunos mensajes de error.

    X esperado, tengo y

    Este mensaje de error aparece siempre que comete un error de sintaxis simple. Esto puede suceder si usa la puntuación incorrecta o usa un tipo de datos no válido en una declaración. Entonces, si tuviera que escribir esto:

    1 script.Parent.Position = falso

    El código no funcionaría porque la propiedad Position es un tipo de datos Vector3 o CFrame, pero false es un booleano. Por lo tanto, la salida imprimiría "Vector3 esperado, se volvió booleano". Solucione esto reemplazando "falso" con coordenadas.

    X no es un miembro válido de Y

    Este error ocurre si el servidor no pudo encontrar el objeto o la propiedad a la que se accede con la ruta. Entonces, si tuviera que insertar este script en un modelo, no funcionaría:

    1 script.Parent.Position = Vector3.new (1,4,4)

    No funcionará, porque si miras en la ventana Propiedades, verás que no existe tal propiedad que altere su posición. Tendría que escribir cada parte individualmente o usar WeldConstraint.

    Esto también puede ocurrir por errores ortográficos en su secuencia de comandos.

    Argumento x faltante o nulo

    Este error ocurre cuando usted, en una función, omite un parámetro necesario. Si tuviera que insertar esto en el espacio de trabajo:

    1 juego Espacio de trabajo: FindFirstChild ()

    El código no funcionaría, porque todavía tengo que darle a la función algo que buscar. Entonces, el código no sabrá qué buscar, dando un error.

    Rendimiento infinito posible en x

    Esto ocurre cuando usa una función de rendimiento que se supone que debe encontrar algo que aún no se ha cargado. Por ejemplo:

    1 juego. Espacio de trabajo: WaitForChild ("Rueda")

    Si Wheel no existe, el script imprimirá el error en naranja y esperará hasta que exista. Podría terminar esperando eternamente a que se cargue, por lo que cualquier código debajo de él no funcionará.

    Declaración incompleta: asignación esperada o llamada de función

    Esto ocurre cuando falta parte de una línea.

    1 local existe =

    Puede ver que no le he asignado un valor a Var, pero he incluido un signo igual. Esto crearía un error. Si desea establecer Var en cero, excluya el signo igual.

    ¡Y eso es todo lo que necesitas saber para crear tu primer juego funcional! Si necesita habilidades adicionales, vaya al Tutorial de creación de scripts para expertos.

    Ejemplos

    Kick Player Block

    Este tutorial pateará a un jugador cada vez que toque una parte. Nuevamente, no puede usar scripts locales en el área de trabajo, así que use un RemoteEvent.

    1 script.Parent.Touched: Connect (función (hit) 2 Humanoid local = hit.Parent: FindFirstChild ("Humanoid") 3 si Humanoid luego 4 jugador local = game.Players: GetPlayerFromCharacter (hit.Parent) 5 game.ReplicatedStorage. RemoteEvent: FireClient (jugador) 6 final 7 final)

    Luego, cree un oyente en StarterGui usando un script local.

    1 juego.ReplicatedStorage.OnClientEvent: Connect (function () 2 game.Players.LocalPlayer: Kick ("lol") 3 end)

    Aquí, estoy usando una función Kick () para expulsar al jugador del juego. El LocalPlayer es el jugador que disparó el evento. En una función de Patada (x), el parámetro x representa el motivo de la patada del jugador.

    Generador de granadas

    Este tutorial demostrará cómo hacer que una granada funcional aparezca y explote cuando se hace clic en una parte.

    1 antirrebote local = falso 2 local GrenadeSpawner = script.Parent 3 GrenadeSpawner.ClickDetector.MouseClick: Connect (function () 4 si debounce == false entonces 5 debounce = true 6 local Grenade = Instance.new ("Part") 7 Grenade. Tamaño = Vector3.new (1,2,1) 8 Grenade.Parent = game.Workspace 9 Grenade.Position = Vector3.new (1,1,1) 10 11 local TextureMesh = Instance.new ("SpecialMesh") 12 TextureMesh .Parent = Grenade 13 TextureMesh.TextureId = "rbxassetid: // 290930193" 14 TextureMesh.MeshId = "rbxassetid: // 294740282" 15 16 wait (1) 17 local Explode = Instance.new ("Explosion") 18 Explode.Parent = Granada 19 Granada: Destruir () 20 rebote = falso 21 final 22 final)

    En este script, cuando se hace clic en GrenadeSpawner, se crea una pieza. Luego, creará un SpecialMesh, que hará que parezca una granada real. Por supuesto, tendrá que cambiar las ID de los activos.

    Luego, esperará 1 segundo antes de explotar y destruir la granada. Debounce solo está ahí para asegurarse de que solo pueda existir una granada a la vez para evitar el spam.

    Añade un comentario de Tutorial: guía avanzada para la creación de scripts
    ¡Comentario enviado con éxito! Lo revisaremos en las próximas horas.