Etkinlikler

*Bu içerik, yapay zekâ (beta) kullanılarak çevrildi ve hatalar içerebilir. Sayfayı İngilizce görüntülemek için buraya tıkla.

Etkinlikler, deneyiminizde dinleyebileceğiniz ve yanıt verebileceğiniz olaylardır.Birçok Roblox hizmeti ve nesnesi, belirli eylemler veya değişikliklere otomatik olarak ateş etme yanıtı olarak entegre etkinlikler içerir.

Örneğin, bir oyuncunun Character bir BasePart dokunması otomatik olarak bir Touched etkinliği ateşler.Bir oyuncu deneyiminize katıldığında her seferinde, Players.PlayerAdded etkinliği ateşlenir.

Etkinliklerin ve istemci-sunucu mimarisinin aşırı sayısı nedeniyle, Roblox kodlaması genellikle etkinlik tabanlı olarak adlandırılır.Bu yaklaşım, çerçeve tabanlı kod çalıştırmayı vurgulayan birçok diğer oyun motorundan farklıdır.

Etkinlikleri dinlemek veya yanıt olarak herhangi bir eylem yapmak zorunda değilsiniz, ancak etkinlikler ateş ediyor ve yine de mevcut.Bir olaya yanıt vermek istediğinizde, buna bir işlev bağlarsınız.

İşlevleri etkinliklere bağla

Bir işlevi, etkinin başladığı her seferinde kodu çalıştırmak için Connect() kullanarak bir olaya bağlarsınız.Çoğu olay bağlı işlevlerine argümanlar gönderir.Örneğin, BasePart.Touched etkinliği parçaya dokunan nesneyi geçer (örneğin sol el veya araba tekerleği), ve Players.PlayerAdded etkinliği deneyiminize katılan Player nesneyi geçer.

Aşağıdaki kod örneği, onPartTouched() adlı bir işlevin bir parçanın Touched etkinliğine nasıl bağlanacağını gösterir:


-- Senaryonun parçaya ebeveyn olduğunu varsayar
local part = script.Parent
-- Kaçırmak istediğiniz işlev
local function onPartTouched(object)
print("Part was touched by", object:GetFullName())
end
-- İşlevi parçanın Dokunma etkinliğine bağla
part.Touched:Connect(onPartTouched)

Ebeveyn kapsamda değişkenleri kullanmak istediğinizde ve başka yerde işlev kullanmanıza gerek olmadığında anonim işlevleri etkinliklere bağlayabilirsiniz.Örneğin, bu kod örneği, Hizmetler içindeki benzer örnekten rahatsız edici aracı işlevini ortadan kaldırır:


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
-- Bir karakter kaldırıldığında saveProgress() çağıran anonim işlev
-- deneyimden (bu durumda, oyuncu ayrıldığında).
Players.PlayerAdded:Connect(function(player)
player.CharacterRemoving:Connect(saveProgress)
end)

Fonksiyonları olaylardan koparma

The Connect() yöntemi bir RBXScriptConnection nesnesi döndürür.Bir işlevi bir olaya bağlarsanız, ancak bir sonraki olay ateşlendiğinde işlevi çağırmak istemezseniz (örneğin, bir koşul karşılandıktan sonra), nesneye çağrı yaparak bağlantıyı kesin.

Aşağıdaki kod örneği, bir işlevi Part.Touched etkinliğinden nasıl bağlayacağınızı ve bağlantıyı kesacağınızı gösterir:


local Workspace = game:GetService("Workspace")
local part = Workspace.Part
local targetPart = Workspace.TargetPart
-- Bağlantı için boş bir yer tutma değişkeni ilan et
local connection
local function onPartTouched(otherPart)
if otherPart == targetPart then
print("The part hit the target!")
-- Bağlantıyı kopartın
connection:Disconnect()
end
end
-- Yukarıdaki işlevi Dokunulmuş etkinliğine bağla
connection = part.Touched:Connect(onPartTouched)

Sadece bir kez bir işlevi bir olaya bağlamak istiyorsanız - yani, sadece olay ateşlendiğinde ilk kez işlevi bağlayın ve bağlantıyı kesin alternatif olarak Once() yöntemi kullanın.

Etkinliklerin ateşlenmesini bekleyin

Belirli bir olay ateşlenene kadar bir senaryonun verilmesini istiyorsanız, Wait() yöntemini kullanın.Bu yöntem, daha sonra kullanmak için değişkenlere atayabileceğiniz olayın argümanlarını döndürür:


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

Diğer Etkinlik Türleri

  • Bağlanabilir olaylar

    Bağlanabilir olaylar, müşteri-sunucu sınırının aynı tarafında senaryolar arasında iletişim kurmanıza izin verir .

  • Uzak olaylar

    Uzak olaylar, istemci-sunucu sınırı boyunca iletişim kurmanıza izin verir çapraz .