Olaylar, oyununuz içinde dinleyebileceğiniz ve yanıt verebileceğiniz olaylardır. Birçok Roblox servisi ve nesnesi, belirli eylemler veya değişiklikler karşısında otomatik olarak ateş eden yerleşik olaylara sahiptir.
Örneğin, bir oyuncunun Character nesnesinin bir BasePart nesnesine dokunması, otomatik olarak bir Touched olayını ateşler. Her bir oyuncu oyununuza katıldığında, Players.PlayerAdded olayı ateşlenir.
Olay sayısının fazlalığı ve istemci-sunucu mimarisi nedeniyle, Roblox betiklemesi genellikle olay odaklı olarak adlandırılır. Bu yaklaşım, çoğu diğer oyun motorlarının, bir kare bazında kod çalıştırmayı vurguladıkları yöntemden farklıdır.
Olayları dinlemek veya onlara yanıt vermek zorunda değilsiniz, ancak olaylar yine de ateşleniyor ve mevcuttur. Bir olaya yanıt vermek istediğinizde, ona bir işlev bağlarsınız.
Olaylara işlev bağlama
Bir olaya bir işlev bağlamak için Connect() kullanarak her seferinde olay ateşlendiğinde kodu çalıştırırsınız. Çoğu olay, bağlı işlevlerine argümanlar iletir. Örneğin, BasePart.Touched olayı, parçaya dokunan nesneyi (bir sol el veya araba tekerleği gibi) iletir ve Players.PlayerAdded olayı, oyununuza katılan Player nesnesini iletir.
Aşağıdaki kod örneği, Touched olayına onPartTouched() adında bir işlevin nasıl bağlanacağını gösterir:
-- Scirpt'in parçanın üstünde bulunduğunu varsayıyoruz
local part = script.Parent
-- Çalıştırmak istediğiniz işlev
local function onPartTouched(object)
print("Parça, ", object:GetFullName(), "tarafından dokunuldu.")
end
-- İşlevi parçanın Touched olayına bağlayın
part.Touched:Connect(onPartTouched)
Ayrıca, bir işlevi başka bir yerde kullanmaya gerek kalmadan üst kapsamda değişkenler kullanmak istiyorsanız olaya anonim işlevler de bağlayabilirsiniz. Örneğin, bu kod örneği, Servisler bölümündeki benzer örnekteki hantal ara işlevden kaçını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 oyun dışına alındığında (bu durumda oyuncu çıktığında) saveProgress() çağıran anonim işlev
Players.PlayerAdded:Connect(function(player)
player.CharacterRemoving:Connect(saveProgress)
end)
Olaylardan işlevleri ayırma
Connect() metodu, bir RBXScriptConnection nesnesi döndürür. Bir işlevi bir olaya bağlarsanız, ancak bir olay bir sonraki kez ateşlendiğinde (örneğin, belirli bir koşul karşılandığında) bu işlevi çağırmak istemiyorsanız, Disconnect() çağırarak bağlantıyı kesebilirsiniz.
Aşağıdaki kod örneği, Part.Touched olayına bir işlev bağlamak ve kesmek için nasıl yapılacağını gösterir:
local Workspace = game:GetService("Workspace")
local part = Workspace.Part
local targetPart = Workspace.TargetPart
-- Bağlantı için boş bir yer tutucu değişkeni tanımlayın
local connection
local function onPartTouched(otherPart)
if otherPart == targetPart then
print("Parça hedefe çarptı!")
-- Bağlantıyı kesin
connection:Disconnect()
end
end
-- Yukarıdaki işlevi Touched olayına bağlayın
connection = part.Touched:Connect(onPartTouched)
Olayların ateşlenmesini bekleme
Bir scriptin, belirli bir olayın ateşlenmesini beklemesi için, Wait() yöntemini kullanmalısınız. Bu yöntem, olayın argümanlarını döndürür ve bunları daha sonra kullanılmak üzere değişkenlere atayabilirsiniz:
local Workspace = game:GetService("Workspace")local part = Workspace.Partlocal touchedPart = part.Touched:Wait()print("Parça, ", touchedPart:GetFullName(), "tarafından dokunuldu.")
Diğer olay türleri
Bağlanabilir olaylar, aynı tarafta yani istemci-sunucu sınırında iki script arasında iletişim sağlar.
Uzak olaylar, istemci-sunucu sınırını aşarak iletişim sağlar.
Ertelemeli motor olayları, olay işleyicilerini belirli devam noktalarına kadar ertelemektedir.