Eventos são ocorrências dentro da sua experiência que você pode ouvir e responder.Muitos serviços e objetos do Roblox têm eventos integrados que ativam automaticamente fogo em resposta a ações ou alterações específicas.
Por exemplo, o toque de um jogador em Character toca em BasePart aciona automaticamente um evento Touched.Cada vez que um jogador se junta à sua experiência, o evento Players.PlayerAdded é acionado.
Devido ao número imenso de eventos e arquitetura cliente-servidor, a programação do Roblox é frequentemente referida como event-driven .Essa abordagem é diferente de muitos outros motores de jogos, que enfatizam a execução de código em uma base de quadro por quadro.
Você não precisa ouvir eventos ou tomar qualquer ação em resposta a eles, mas os eventos estão ativados e disponíveis, no entanto.Quando você quiser responder a um evento, você conecta uma função a ele.
Conectar funções a eventos
Você conecta uma função a um evento usando Connect() para executar código sempre que o evento for disparado.A maioria dos eventos passa argumentos para suas funções conectadas.Por exemplo, o evento BasePart.Touched passa o objeto que tocou a peça (como uma mão esquerda ou roda de carro), e o evento Players.PlayerAdded passa o Player que se juntou à sua experiência.
O seguinte exemplo de código mostra como conectar uma função chamada onPartTouched() ao evento Touched de uma peça:
-- Supõe que o script esteja ligado à parte
local part = script.Parent
-- A função que você deseja executar
local function onPartTouched(object)
print("Part was touched by", object:GetFullName())
end
-- Conecte a função ao evento Tocado da peça
part.Touched:Connect(onPartTouched)
Você também pode conectar funções anônimas a eventos quando quiser usar variáveis no escopo pai e não precisar usar a função em outro lugar.Por exemplo, este exemplo de código evita a função intermediária desajeitada da amostra similar em Serviços:
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
-- Função anônima que chama saveProgress() quando um personagem é removido
-- da experiência (neste caso, quando o jogador sai).
Players.PlayerAdded:Connect(function(player)
player.CharacterRemoving:Connect(saveProgress)
end)
Desconectar funções de eventos
O método Connect() retorna um ObjetoRBXScriptConnection.Se você conectar uma função a um evento, mas não quiser chamar a função na próxima vez que um evento for disparado (como após alguma condição ser atendida), desconecte-a chamando Disconnect() no objeto RBXScriptConnection.
O seguinte exemplo de código mostra como conectar e desconectar uma função do evento Part.Touched:
local Workspace = game:GetService("Workspace")
local part = Workspace.Part
local targetPart = Workspace.TargetPart
-- Declare uma variável de espaço reservado vazia para a conexão
local connection
local function onPartTouched(otherPart)
if otherPart == targetPart then
print("The part hit the target!")
-- Desconectar a conexão
connection:Disconnect()
end
end
-- Conecte a função acima ao evento Tocado
connection = part.Touched:Connect(onPartTouched)
Se você quiser conectar apenas uma função a um evento uma vez - isto é, executar apenas a função na primeira vez que o evento é disparado - use o método Once() como uma alternativa mais conveniente para conectar e desconectar a função.
Aguarde eventos Iniciar / executar
Se você quiser que um script produza até que um evento específico seja disparado, use o método Wait().Este método retorna os argumentos do evento, que você pode atribuir a variáveis para uso posterior:
local Workspace = game:GetService("Workspace")local part = Workspace.Partlocal touchedPart = part.Touched:Wait()print("The part was touched by", touchedPart:GetFullName())
Outros tipos de eventos
Eventos vinculáveis permitem que você se comunique entre scripts no mesmo lado da fronteira cliente-servidor.
Eventos remotos permitem que você se comunique através de a fronteira cliente-servidor.