Orta seviye öğreticiler

Puan kazanma

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

Önceki derslerde, solma platformları ve ölümcül lav gibi çeşitli deneyim özellikleri oluşturdunuz. Bu ders, kullanıcıların en uzun süre hayatta kalmaya çalıştıkları oynanabilir bir deneyim oluşturmak için bunları bir araya getiriyor. Her saniye hayatta kaldıklarında, puanlarına bir puan eklenecek.

Ayarlama

Öncelikle, deneyiminiz için sahneyi ayarlamanız gerekecek. Önceki derste yaptığınız solma platformlarını çoğaltın ve kullanıcıların mümkün olduğunca uzun süre platform tahtasında kalmaları için rekabet etmelerini sağlayın.

Kullanıcıların platformlardan düştüklerinde ölmesi için ölümcül lav da kullanabilirsiniz veya sadece onların düşmesine izin verebilirsiniz. Kullanıcıların oyun oynamaya başlayabilmesi için platformlara atlayabilecekleri bir SpawnLocation yerleştirdiğinizden emin olun.

Bir lav tabanının üzerinde, solma platformlarıyla dolu bir ızgara üzerine yerleştirilmiş bir doğma noktası

Oyuncu puanları

Roblox, kullanıcı istatistiklerini gösteren yerleşik bir Leaderboard (Liderlik Tablosu) sunar. Oyuncu puanlarını liderlik tablosunda ayarladığınızda, deneyimin sağ tarafında ekranda görünürler.

Kullanıcı adı ve puanlarının gösterildiği Liderlik Tablosu

Bilgileri görüntülemek için daha özelleştirilebilir yolları sonraki derslerde öğreneceksiniz, ancak liderlik tablosu, Roblox'ta görülebilir bir puan sistemi oluşturmanın en basit yoludur.

Deneyim durumunu ayarlayan betikleri ServerScriptService içerisinde yerleştirmek en iyisidir çünkü deneyim başladığında otomatik olarak çalışacaklardır. ServerScriptService içinde SetupPoints adında bir betik oluşturun.

Explorer penceresinde ServerScriptService'de SetupPoints betiği yerinde

Oyuncuları dinleyin

Roblox'ta bir hizmet (service), bir dizi yararlı işlevi gerçekleştiren bir nesnedir. Players servisi, deneyime katılan her kullanıcı için puanları ayarlamak üzere kullanabileceğiniz PlayerAdded adında bir olaya sahiptir.

Hizmetlere, GetService fonksiyonu ile game nesnesinde erişebilirsiniz. game, deneyiminizdeki her şeyi içeren, her yerden erişilebilir bir değişkendir.

  1. game:GetService("Players") kullanarak Players servisi için bir değişken oluşturun.

  2. Gelen oyuncu için bir parametreye sahip onPlayerAdded adında bir fonksiyon oluşturun.

  3. onPlayerAdded fonksiyonunu PlayerAdded olayına bağlayın.


    local Players = game:GetService("Players")
    local function onPlayerAdded(player)
    end
    Players.PlayerAdded:Connect(onPlayerAdded)

İstatistikler klasörü oluşturun

Bir kullanıcının puanlarının liderlik tablosunda görüntülenmesini sağlamak için tek yapmanız gereken, Player nesnesinde "leaderstats" adında yeni bir Folder oluşturarak puanlarını oraya koymaktır. Yeni nesneler, bir betik içinden Instance.new() fonksiyonu aracılığıyla oluşturulabilir.

  1. Instance.new("Folder") kullanarak yeni bir Folder nesnesi oluşturun ve sonucu leaderstats adında yeni bir değişkende saklayın.


    local function onPlayerAdded(player)
    local leaderstats = Instance.new("Folder")
    end
  2. leaderstats'ın Name özelliğini "leaderstats" olarak ayarlayın.

  3. leaderstatsplayer'a ebeveyn olarak atayın.


    local Players = game:GetService("Players")
    local function onPlayerAdded(player)
    local leaderstats = Instance.new("Folder")
    leaderstats.Name = "leaderstats"
    leaderstats.Parent = player
    end
    Players.PlayerAdded:Connect(onPlayerAdded)

Puanları oluşturun

Liderlik tablosu, leaderstats klasöründeki her türlü değeri okuyarak bulduğu her şeyi gösterir.

Bir oyuncunun puanlarını takip edecek bir istatistik eklemek için yeni bir IntValue nesnesi, leaderstats klasörüne ebeveyn olarak eklenebilir. Değer nesnesinin adı, mevcut değeriyle birlikte görüntülenir.

  1. Instance.new() kullanarak yeni bir IntValue nesnesi oluşturmak için points adında bir değişken kullanın.
  2. Name'i "Points" olarak ayarlayın.
  3. Value'yi 0 olarak ayarlayın; bu, liderlik tablosunda başlangıçta oyuncu için gösterilecektir.
  4. points nesnesini leaderstats klasörüne ebeveyn olarak atayın.

local Players = game:GetService("Players")
local function onPlayerAdded(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local points = Instance.new("IntValue")
points.Name = "Points"
points.Value = 0
points.Parent = leaderstats
end
Players.PlayerAdded:Connect(onPlayerAdded)

Deneyiminizi test edin ve sağ üst köşede kullanıcı adlarınızın ve yanında bir puan gösterildiğini görmelisiniz.

Zamanı say

Her kullanıcı, hayatta kaldığı her saniye için bir puan kazanmalıdır. Bir while döngüsü ve task.wait() fonksiyonu, her saniye puan değerini güncellemek için kullanılabilir.

  1. Betiğin sonunda true koşulu ile bir while döngüsü oluşturun.
  2. Döngüde task.wait() ile 1 saniye bekleyin.

Players.PlayerAdded:Connect(onPlayerAdded)
while true do
task.wait(1)
end

Oyuncu listesi

Deneyimdeki her kullanıcı için kod çalıştırmak için, GetPlayers fonksiyonu tarafından döndürülen kullanıcıların dizisini döngüye almanız gerekiyor.

Bir dizi, sırayla depolanan bir dizi öğedir. Her öğeye indeks konumuyla erişilebilir, başlangıç noktası 1'dir. Bir dizinin uzunluğunu öğrenmek için başına # yazabilirsiniz.

  1. Players:GetPlayers() sonucunu playerList değişkenine depolayın.
  2. Başlangıç değeri 1 ve bitiş değeri #playerList olan bir for döngüsü oluşturun, böylece her kullanıcının bir döngü iterasyonu almasını sağlarsınız.

while true do
task.wait(1)
local playerList = Players:GetPlayers()
for currentPlayer = 1, #playerList do
-- Kullanıcı listesinde her bir kullanıcı için mantığınızı buraya ekleyin
end
end

Puanları ödüllendirin

For döngüsündeki her kullanıcıya bir puan ödüllendirmek için, diziden kullanıcıyı almalı ve leaderstats klasöründeki Points nesnesine 1 eklemelisiniz.

Bir dizide depolanan nesnelere köşe parantezleri kullanılarak erişilir - örneğin, playerList dizisinin ilk öğesine playerList[1] ile erişilebilir. Eğer döngüde playerList[currentPlayer] yazarsanız, döngünün her iterasyonuyla listedeki her kullanıcıyı geçebilirsiniz.

  1. playerList[currentPlayer] üzerindeki kullanıcıyı player adında bir değişkene depolayın.
  2. Kullanıcının Points nesnesini points adında bir değişkene depolayın.
  3. points üzerindeki Value özelliğini points.Value + 1 olarak ayarlayın.

while true do
task.wait(1)
local playerList = Players:GetPlayers()
for currentPlayer = 1, #playerList do
local player = playerList[currentPlayer]
local points = player.leaderstats.Points
points.Value += 1
end
end

Deneyiminizi test edin ve liderlik tablosunun kullanıcı puanınızı her saniye 1 artarak gösterdiğini göreceksiniz.

Karakterleri dinleyin

Deneyimin amacı, en uzun süre hayatta kalan kişiyi görmek olduğundan, ölen kullanıcıların puanlarının sıfırlanması gerekir.

Kullanıcının öldüğünü tespit etmek için Character modeline erişmeniz gerekir. Bu model, kullanıcı Player nesnesi yüklendikten sonra deneyime eklenir ve karakter kullanıma hazır olduğunda dinlemek için CharacterAdded olayını kullanabilirsiniz. İki parametreye sahip onCharacterAdded adında bir fonksiyon oluşturun: biri karakter için, diğeri oyuncu için.


local Players = game:GetService("Players")
local function onCharacterAdded(character, player)
end
local function onPlayerAdded(player)
local leaderstats = Instance.new("Folder")

onCharacterAdded fonksiyonunun parametrelerinde kullanıcıyı dahil etseniz de, gerçek CharacterAdded olayı yalnızca karakteri döndürdüğünden, player nesnesini de iletebilmek için olay bağlantısı için anonim bir fonksiyon kullanmalısınız.


local function onPlayerAdded(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local points = Instance.new("IntValue")
points.Name = "Points"
points.Value = 0
points.Parent = leaderstats
player.CharacterAdded:Connect(function(character)
onCharacterAdded(character, player)
end)
end

Puanları sıfırlama

Bir kullanıcı öldüğünde, Humanoid otomatik olarak bir Died olayı tetikler. Bu olayı, puanları sıfırlamak için ne zaman tetikleyeceğinizi öğrenmekte kullanabilirsiniz.

Humanoid, Karakter modelinin içinde bulunur, ancak o modelin içeriği, kullanıcı doğduğunda yalnızca montelenir. Humanoid nesnesinin yüklenmesini güvenli bir şekilde beklemek için, WaitForChild() fonksiyonunu kullanın. Bunu herhangi bir ebeveyn nesnede çağırabilir ve beklediğiniz çocuğun isim dizesini parametre olarak geçebilirsiniz. character:WaitForChild("Humanoid") kullanarak Humanoid için bir değişken oluşturun.


local Players = game:GetService("Players")
local function onCharacterAdded(character, player)
local humanoid = character:WaitForChild("Humanoid")
end

Died olayına bağlamanız gereken fonksiyon çok kısa ve yalnızca burada kullanılacağı için, tekrar anonim bir fonksiyon kullanabilirsiniz.

  1. Humanoid'in Died olayına yeni bir anonim fonksiyon bağlayın.
  2. Anonim fonksiyonda, kullanıcının Points nesnesi için points adında bir değişken oluşturun.
  3. points üzerindeki Value özelliğini 0 olarak ayarlayın.

local Players = game:GetService("Players")
local function onCharacterAdded(character, player)
local humanoid = character:WaitForChild("Humanoid")
humanoid.Died:Connect(function()
local points = player.leaderstats.Points
points.Value = 0
end)
end

Bunu test ettiğinizde, kullanıcının puanının öldüğünde sıfırlandığını göreceksiniz.

Oyuncuyu kontrol et

Eğer kullanıcılar öldüklerinde bile puan kazanmaya devam ederse, bu deneyimin ruhuna uygun olmaz, bu yüzden kodun kullanıcıların puan kazanmadan önce hayatta olup olmadıklarını kontrol etmesi gerekir.

Başlangıç olarak, onPlayerAdded fonksiyonunda kullanıcıların hayatta olup olmadığını kontrol etmek için kullanılabilecek bir öznitelik (attribute) tanımlamanız gerekir. Bu aşamada, kullanıcı henüz hayatta değil ve doğmamıştır, çünkü karakter modeli henüz eklenmemiştir.

Öznitelikler, Roblox'taki nesneleri kendi verilerinizle özelleştirmenizi sağlar. Bir öznitelik, bir isim ve bir değerden oluşur. SetAttribute fonksiyonunu kullanarak herhangi bir nesnede oluşturabilirsiniz. player üzerinde yeni bir öznitelik olan "IsAlive" adında bir öznitelik oluşturmak için SetAttribute çağrısını yapın ve değerini false yapın.


local function onPlayerAdded(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local points = Instance.new("IntValue")
points.Name = "Points"
points.Value = 0
points.Parent = leaderstats
player:SetAttribute("IsAlive", false)
player.CharacterAdded:Connect(function(character)
onCharacterAdded(character, player)
end)
end

Kullanıcının karakter modeli yeniden doğduğunda, IsAlive değerinin true olarak değiştirilmesi gerekir, böylece kullanıcı tekrar puan kazanabilir.

  1. onCharacterAdded içinde, player'ın IsAlive özniteliğini true olarak ayarlayın.
  2. onCharacterDied içinde, player'ın IsAlive özniteliğini false olarak ayarlayın.

local Players = game:GetService("Players")
local function onCharacterAdded(character, player)
player:SetAttribute("IsAlive", true)
local humanoid = character:WaitForChild("Humanoid")
humanoid.Died:Connect(function()
local points = player.leaderstats.Points
points.Value = 0
player:SetAttribute("IsAlive", false)
end)
end

Son olarak, IsAlive her puan ödüllendirilmeden önce while döngüsünde kontrol edilmelidir. GetAttribute fonksiyonu, bir özniteliğin adını alır ve değerini döndürür. while döngüsünde, puan ödüllendirme kodunu if ifadesi ile sarmalayın ve koşul player:GetAttribute("IsAlive") olarak ayarlayın.


while true do
task.wait(1)
local playerList = Players:GetPlayers()
for currentPlayer = 1, #playerList do
local player = playerList[currentPlayer]
if player:GetAttribute("IsAlive") then
local points = player.leaderstats.Points
points.Value += 1
end
end
end

Artık deneyiminizi test edin ve kullanıcının hayatta kaldığı her saniye puan kazandığını, hayatta olmadığında ise 0'da kaldığını göreceksiniz. Arkadaşlarınızı yanınıza alın ve kimlerin en yüksek puanı alabileceğini görün.

Bu sadece bir başlangıçtır: deneyiminizi kullanıcılarınız için geliştirerek devam edebilirsiniz. İşte bazı ipuçları:

  • Tüm platformlar için kodu tek bir betikte toplayarak güncellemeleri çok daha kolay hale getirin.
  • Kullanıcıların deneyim alanına teleport edilmelerini sağlayan bir lobi alanı oluşturun, böylece kullanıcılar aynı anda başlayabilir.
  • Her turun kazananlarını duyurun.

Nihai kod


local Players = game:GetService("Players")
local function onCharacterAdded(character, player)
player:SetAttribute("IsAlive", true)
local humanoid = character:WaitForChild("Humanoid")
humanoid.Died:Connect(function()
local points = player.leaderstats.Points
points.Value = 0
player:SetAttribute("IsAlive", false)
end)
end
local function onPlayerAdded(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local points = Instance.new("IntValue")
points.Name = "Points"
points.Value = 0
points.Parent = leaderstats
player:SetAttribute("IsAlive", false)
player.CharacterAdded:Connect(function(character)
onCharacterAdded(character, player)
end)
end
Players.PlayerAdded:Connect(onPlayerAdded)
while true do
task.wait(1)
local playerList = Players:GetPlayers()
for i = 1, #playerList do
local player = playerList[i]
if player:GetAttribute("IsAlive") then
local points = player.leaderstats.Points
points.Value += 1
end
end
end
©2026 Roblox Corporation. Roblox, the Roblox logo and Powering Imagination are among our registered and unregistered trademarks in the U.S. and other countries.