Los eventos son ocurrencias dentro de tu experiencia que puedes escuchar y responder.Muchos servicios y objetos de Roblox tienen eventos integrados que automáticamente disparan en respuesta a acciones o cambios específicos.
Por ejemplo, el toque de un jugador en toca un evento automáticamente.Cada vez que un jugador se une a tu experiencia, se activa el evento Players.PlayerAdded.
Debido al número abrumador de eventos y arquitectura cliente-servidor, la programación de Roblox a menudo se refiere como impulsada por eventos .Este enfoque es diferente de muchos otros motores de juegos, que enfatizan ejecutar código en una base de marco por marco.
No tienes que escuchar eventos o tomar ninguna acción en respuesta a ellos, pero los eventos están disparando y están disponibles de todos modos.Cuando quieras responder a un evento, conectas una función a él.
Conectar funciones a eventos
Conectas una función a un evento usando Connect() para ejecutar código cada vez que se activa el evento.La mayoría de los eventos pasan argumentos a sus funciones conectadas.Por ejemplo, el evento BasePart.Touched pasa el objeto que tocó la parte (como una mano izquierda o una rueda de coche), y el evento Players.PlayerAdded pasa el Player que se unió a tu experiencia.
El siguiente ejemplo de código muestra cómo conectar una función llamada onPartTouched() al evento Touched de una parte:
-- Supone que el script está asociado a la parte
local part = script.Parent
-- La función que quieres ejecutar
local function onPartTouched(object)
print("Part was touched by", object:GetFullName())
end
-- Conecta la función al evento Tocado de la parte
part.Touched:Connect(onPartTouched)
También puedes conectar funciones anónimas a eventos cuando quieras usar variables en el alcance padre y no necesites usar la función en otro lugar.Por ejemplo, este ejemplo de código evita la función intermediaria incómoda de la muestra similar en Servicios :
local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local SaveManager = require(ReplicatedStorage:WaitForChild("SaveManager"))
local function saveProgress(character)
local position = character:FindFirstChild("HumanoidRootPart").Position
SaveManager.saveData(character, position)
end
-- Función anónima que llama a saveProgress() cuando se elimina un personaje
-- de la experiencia (en este caso, cuando el jugador se va).
Players.PlayerAdded:Connect(function(player)
player.CharacterRemoving:Connect(saveProgress)
end)
Desconectar funciones de eventos
El método Connect() devuelve un objeto RBXScriptConnection.Si conectas una función a un evento, pero no quieres llamar a la función la próxima vez que se active un evento (como después de que se cumpla una condición), desconéctala llamando Disconnect() al objeto RBXScriptConnection.
El siguiente ejemplo de código muestra cómo conectar y desconectar una función del evento Part.Touched:
local Workspace = game:GetService("Workspace")
local part = Workspace.Part
local targetPart = Workspace.TargetPart
-- Declarar una variable de marcador vacía para la conexión
local connection
local function onPartTouched(otherPart)
if otherPart == targetPart then
print("The part hit the target!")
-- Desconectar la conexión
connection:Disconnect()
end
end
-- Conecta la función anterior al evento Touched
connection = part.Touched:Connect(onPartTouched)
Si solo quieres conectar una función a un evento una vez, es decir, solo ejecutar la función la primera vez que se active el evento, usa el método Once() como una alternativa más conveniente para conectar y desconectar la función.
Espera a que los eventos se desencadenar
Si quieres que un script se ejecute hasta que se active un evento específico, usa el método Wait().Este método devuelve los argumentos del evento, que puedes asignar a variables para su uso posterior:
local Workspace = game:GetService("Workspace")local part = Workspace.Partlocal touchedPart = part.Touched:Wait()print("The part was touched by", touchedPart:GetFullName())
Otros tipos de eventos
Los eventos vinculables te permiten comunicarte entre scripts en el mismo lado del límite cliente-servidor.
Los eventos remotos te permiten comunicarte a través de la frontera cliente-servidor.