Eventi

*Questo contenuto è tradotto usando AI (Beta) e potrebbe contenere errori. Per visualizzare questa pagina in inglese, clicca qui.

Gli eventi sono occorrenze all'interno della tua esperienza che puoi ascoltare e rispondere.Molti servizi e oggetti Roblox hanno eventi integrati che si attivano automaticamente fuoco in risposta a azioni o cambiamenti specifici.

Ad esempio, il toccare di un Giocatorecon Character tocca un BasePart evento con Touched evento automaticamente.Ogni volta che un giocatore si unisce alla tua esperienza, l'evento Players.PlayerAdded si attiva.

A causa del numero enorme di eventi e dell'architettura client-server, la programmazione di Roblox viene spesso definita event-driven .Questo approccio è diverso da molti altri motori di gioco, che enfatizzano l'esecuzione del codice su una base frame-by-frame.

Non devi ascoltare eventi o prendere alcuna azione in risposta ad essi, ma gli eventi sono in fase di sparo e comunque disponibili.Quando vuoi rispondere a un evento, connetti una funzione ad esso.

Connetti le funzioni agli eventi

Connetti una funzione a un evento utilizzando Connect() per eseguire il codice ogni volta che l'evento si attiva.La maggior parte degli eventi passa gli argomenti alle loro funzioni connesse.Ad esempio, l'evento BasePart.Touched passa l'oggetto che ha toccato la parte (come una mano sinistra o una ruota dell'auto), e l'evento Players.PlayerAdded passa il Player che si è unito alla tua esperienza.

Il seguente esempio di codice mostra come connettere una funzione chiamata onPartTouched() all'evento Touched di una parte:


-- Presume che lo script sia parented alla parte
local part = script.Parent
-- La funzione che vuoi Eseguire
local function onPartTouched(object)
print("Part was touched by", object:GetFullName())
end
-- Collega la funzione all'evento Touched della parte
part.Touched:Connect(onPartTouched)

Puoi anche connettere funzioni anonime agli eventi quando vuoi utilizzare le variabili nell'ambito padre e non hai bisogno di utilizzare la funzione altrove.Ad esempio, questo esempio di codice evita la funzione intermediaria awkward dal campione simile in Servizi :


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
-- Funzione anonima che chiama saveProgress() quando viene rimosso un personaggio
-- dalla esperienza (in questo caso, quando il giocatore esce).
Players.PlayerAdded:Connect(function(player)
player.CharacterRemoving:Connect(saveProgress)
end)

Disconnetti le funzioni dagli eventi

Il metodo Connect() restituisce un oggetto RBXScriptConnection.Se connetti una funzione a un evento, ma non vuoi chiamare la funzione la prossima volta che si attiva un evento (ad esempio dopo che viene soddisfata una condizione), disconnettila chiamando Disconnect() sull'oggetto RBXScriptConnection.

Il seguente esempio di codice mostra come connettersi e disconnettersi da una funzione dall'evento Part.Touched:


local Workspace = game:GetService("Workspace")
local part = Workspace.Part
local targetPart = Workspace.TargetPart
-- Dichiarare una variabile di riempimento vuota per la connessione
local connection
local function onPartTouched(otherPart)
if otherPart == targetPart then
print("The part hit the target!")
-- Disconnetti la connessione
connection:Disconnect()
end
end
-- Connetti la funzione sopra alla evento Touched
connection = part.Touched:Connect(onPartTouched)

Se vuoi connettere una funzione a un evento solo una volta - cioè, eseguire solo la funzione la prima volta che l'evento si attiva - usa il metodo Once() come alternativa più conveniente per connettere e disconnettere la funzione.

Aspetta che gli eventi si Lanciare

Se vuoi che uno script produca fino a quando non si attiva un evento specifico, usa il metodo Wait().Questo metodo restituisce gli argomenti dell'evento, che puoi assegnare alle variabili per un uso successivo:


local Workspace = game:GetService("Workspace")
local part = Workspace.Part
local touchedPart = part.Touched:Wait()
print("The part was touched by", touchedPart:GetFullName())

Altri tipi di eventi

  • Eventi legati

    Gli eventi legati ti consentono di comunicare tra gli script sullo stesso lato del confine client-server.

  • Eventi remoti

    Gli eventi remoti ti consentono di comunicare attraverso il confine client-server.