Los eventos son oportunidades dentro de tu experiencia que puedes escuchar y responder. Muchos servicios y objetos de Roblox tienen eventos incrustados que se activan automáticamente para quemar en respuesta a acciones específicas o cambios.
Por ejemplo, un jugador que toca un Character 触摸 un BasePart automáticamente dispara un evento Touched. Cada vez que un jugador se une a tu experiencia, el evento 2>Class.Players.PlayerAdded2> se activa.
Debido al número cada vez mayor de eventos y arquitectura cliente-servidor, a menudo se hace referencia a la programación de Roblox como basada en eventos . Este enfoque es diferente de muchos otros motores de juegos, que enfatizan la ejecución de código en una base de marco.
No tienes que escuchar por eventos o tomar ninguna acción en respuesta a ellos, pero los eventos están disparando y disponibles aún así. Cuando quieras responder a un evento, conectas una función a él.
Conectando Funciones a Eventos
Conecta una función a un evento usando Connect() para ejecutar el 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
El siguiente código de ejemplo muestra cómo conectar una función llamada onPartTouched() al evento de clase Class.BasePart.Touched :
-- Asume que el script está asociado a la parte
local part = script.Parent
-- La función que desea ejecutar
local function onPartTouched(object)
print("Part was touched by", object:GetFullName())
end
-- Conecta la función a un evento Tocado de la parte
part.Touched:Connect(onPartTouched)
También puede conectar funciones anónimas a los eventos cuando quieras usar variables en el rango padre y no necesitas usar la función en ninguna otra parte. Por ejemplo, este código de ejemplo evita la función de intermediario incómoda del ejemplo 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 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)
Desconectando funciones de los 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 ejecuta un evento (por ejemplo, después de que se cumpla alguna condición), desconecta la función
El siguiente código de ejemplo muestra cómo conectar y desconectar una función del evento Part.Touched :
local part = workspace.Part
local targetPart = workspace.TargetPart
-- Declara 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 ejecuta el evento—utiliza el método Once() como alternativa más conveniente para conectar y desconectar la función.
Esperando que se activen los eventos
Si desea que un script se ejecute hasta que se activa un evento específico, use el método Wait(). Este método返回事件的 argumentos, que puede asignar a variables para su uso posterior:
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 de la frontera cliente-servidor.
Los eventos remotos te permiten comunicarte a través de la frontera cliente-servidor.