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 eğitimlerde, solma platformları ve ölümcül lav dahil olmak üzere çeşitli oyun özellikleri yaptınız. Bu eğitim, kullanıcıların en uzun süre hayatta kalmaya çalıştığı oynanabilir bir oyuna bunları bir araya getiriyor. Her saniye hayatta kaldıklarında, puanlarına bir puan eklenecek.

Kurulum

Öncelikle, oyununuz için sahneyi ayarlamanız gerekecek. Önceki eğitimde yaptığınız solma platformlarını çoğaltın ve kullanıcıların mümkün olduğunca uzun süre platformlar üzerinde kalmaları için rekabet etmelerine izin verin.

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

Solma platformlarının üzerinde, bir lav zemin üzerinde bir spawn noktası

Oyuncu puanları

Roblox, kullanıcı istatistiklerini göstermek için yerleşik bir Leaderboard (Liderlik Tablosu) sunar. Oyuncu puanlarını liderlik tablosu aracılığıyla ayarladığınızda, bunlar oyundaki ekranın sağ tarafında görünür.

Kullanıcı adı ve puanların gösterildiği liderlik tablosu

Daha özelleştirilebilir bilgileri görüntüleme yollarını sonraki eğitimlerde öğreneceksiniz, ancak liderlik tablosu, Roblox'ta görünür bir puanlama sistemi oluşturmanın en basit yoludur.

Oyun durumunu ayarlayan betikleri ServerScriptService içine koymak en iyisidir çünkü bunlar oyun başladığında otomatik olarak çalışır. ServerScriptService içinde SetupPoints adında bir betik oluşturun.

Explorer penceresinde ServerScriptService içinde SetupPoints betiği

Oyuncuları dinleyin

Roblox'ta, bir hizmet bir dizi yararlı işlevi yerine getiren bir nesnedir. Players hizmetinin, oyuna katılan her kullanıcı için puanları ayarlamak üzere kullanabileceğiniz PlayerAdded adında bir olayı vardır.

Hizmetlere, GetService işlevi aracılığıyla game nesnesinde erişebilirsiniz. game, oyununuzdaki her şeyi içeren, her yerden erişilebilen bir değişkendir.

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

  2. Gelen oyuncu için bir parametre ile onPlayerAdded adında bir işlev oluşturun.

  3. onPlayerAdded işlevini 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ülenmesi için, yapmanız gereken tek şey, Player nesnesinde "leaderstats" adında yeni bir Folder oluşturmak ve puanlarını oraya koymaktır. Yeni nesneler, bir betik içinde Instance.new() işlevi 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 yapı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 herhangi bir değeri okur ve bulduğu her şeyi görüntüler.

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ülenecektir.

  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 tablosunun başlangıçta oyuncu için göstereceği değerdir.
  4. points nesnesini leaderstats klasörüne ebeveyn yapı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)

Oyunuzu test edin ve liderlik tablosunun sağ üst köşede kullanıcı adlarınız ve yanlarında bir puan gösterdiğini görmelisiniz.

Zamanı sayın

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

  1. Betiğin sonunda, koşul olarak true olan bir while döngüsü oluşturun.
  2. Döngü içinde, task.wait() ile 1 saniye bekleyin.
Players.PlayerAdded:Connect(onPlayerAdded)
while true do
task.wait(1)
end

Oyuncu listesi

Oyundaki her kullanıcı için kod çalıştırmak istiyorsanız, GetPlayers işlevi tarafından döndürülen dizi üzerinden yineleme yapmanız gerekir.

Dizi, sırayla saklanan bir dizi öğedir. Her öğeye indeks konumuyla erişilebilir, bu da 1'den başlar. Bir dizinin uzunluğunu almak için, önüne # koyabilirsiniz.

  1. Players:GetPlayers() sonucunu playerList değişkenine saklayın.
  2. 1 başlangıç değeri ve #playerList bitiş değeri ile bir for döngüsü oluşturun, böylece her oyuncu için bir döngü yinelemesi elde edersiniz.
while true do
task.wait(1)
local playerList = Players:GetPlayers()
for currentPlayer = 1, #playerList do
-- playerList içindeki her oyuncu için burada mantığınızı ekleyin
end
end

Puanları verin

For döngüsündeki her kullanıcıya bir puan vermek için, diziden kullanıcıyı almanız ve leaderstats klasöründeki Points nesnesine 1 eklemeniz gerekecek.

Bir dizide saklanan nesnelere köşeli parantezler kullanarak erişilir - örneğin, playerList dizisindeki ilk öğeye playerList[1] ile erişebilirsiniz. For döngüsünde playerList[currentPlayer] yazarsanız, her döngü yinelemesinde listedeki her kullanıcıyı geçebilirsiniz.

  1. playerList[currentPlayer]'daki kullanıcıyı player adında bir değişkende saklayın.
  2. Kullanıcının Points nesnesini points adında bir değişkende saklayın.
  3. points'ın 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

Oyunuzu test edin ve liderlik tablosunun oyuncularınızın puanının her saniye 1 artarak gösterildiğini görmelisiniz.

Karakterleri dinleyin

Oyunun amacı, en uzun süre hayatta kalan kişinin kim olduğunu görmek olduğundan, ölen kullanıcıların puanlarının 0'a sıfırlanması gerekecek.

Kullanıcının öldüğünü tespit etmek için, kullanıcının Karakter modelini almanız gerekecek. Bu model, yalnızca Player nesnesi yüklendikten sonra oyuna eklenir ve karakterin kullanılabilir hale geldiğini dinlemek için CharacterAdded olayını kullanabilirsiniz. onCharacterAdded adında, biri karakter için, diğeri oyuncu için olmak üzere iki parametre alan bir işlev oluşturun.

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

onCharacterAdded işlevinin parametrelerinde kullanıcıyı dahil etseniz de, gerçek CharacterAdded olayı yalnızca karakteri döndürür, ilişkili kullanıcıyı değil. player nesnesini de geçirmek için, olay bağlantısı için bir anonim işlev kullanı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.CharacterAdded:Connect(function(character)
onCharacterAdded(character, player)
end)
end

Puanları sıfırlayın

Bir kullanıcı öldüğünde, Humanoid otomatik olarak bir Died olayı tetikler. Bu olayı, puanlarını ne zaman sıfırlayacağınızı öğrenmek için kullanabilirsiniz.

Humanoid, Karakter modelinin içinde bulunur, ancak bu modelin içeriği yalnızca kullanıcı doğduğunda bir araya getirilir. Humanoid nesnesinin yüklenmesini güvenli bir şekilde beklemek için, WaitForChild() işlevini kullanın. Bunu, beklediğiniz çocuğun dize adını geçirerek herhangi bir ebeveyn nesnesinde çağırabilirsiniz. Humanoid için beklemek üzere bir değişken oluşturun: character:WaitForChild("Humanoid").

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

Died olayına bağlamanız gereken işlev çok kısadır ve yalnızca burada gerekecektir, bu nedenle yine bir anonim işlev kullanabilirsiniz.

  1. Humanoid'in Died olayına yeni bir anonim işlev bağlayın.
  2. Anonim işlevde, kullanıcının Points nesnesi için points adında bir değişken oluşturun.
  3. points'ın 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 edin ve kullanıcının puanının öldüğünde sıfırlandığını görün.

Oyuncuyu kontrol edin

Eğer kullanıcılar öldüklerinde bile puan kazanmaya devam ediyorlarsa, bu oyunun ruhuna aykırıdır, bu nedenle kodun, puan vermeden önce kullanıcıların hayatta olup olmadığını kontrol etmesi gerekir.

Öncelikle, onPlayerAdded işlevinde kullanıcının hayatta olup olmadığını kontrol etmek için kullanılabilecek bir özellik tanımlamanız gerekecek. Bu noktada, kullanıcı henüz hayatta değil ve doğmamış durumda, çünkü karakter modeli henüz eklenmemiştir.

Özellikler, Roblox'taki nesneleri kendi verilerinizle özelleştirmenizi sağlar. Bir özellik, bir isim ve bir değerden oluşur. Herhangi bir nesnede SetAttribute işlevini kullanarak bir tane oluşturabilirsiniz. player üzerinde yeni bir özellik olan "IsAlive" değerini false olarak oluşturmak için SetAttribute çağrısını 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 kazanmaya başlayabilir.

  1. onCharacterAdded içinde, player'ın IsAlive özelliğini true olarak ayarlayın.
  2. onCharacterDied içinde, player'ın IsAlive özelliğ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 verildiğinde, betiğin sonundaki while döngüsünde kontrol edilmelidir. GetAttribute işlevi, bir özelliğin adını alır ve değeri döndürür. while döngüsünde, puan vermek için kodu if ifadesiyle player:GetAttribute("IsAlive") koşuluyla sarmalayı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 oyununuzu test edin ve kullanıcının hayatta kaldıkları her saniye için puan kazandığını, hayatta olmadıklarında ise 0'da kaldığını görmelisiniz. Arkadaşlarınızı davet edin ve en yüksek puanı kimin alacağını görün.

Bu sadece başlangıç: Oyununuzu kullanıcılarınız için geliştirmeye devam edebilirsiniz. İşte bazı ipuçları:

  • Tüm platformlar için kodu tek bir betikte toplayarak güncellemeyi çok daha kolay hale getirin.
  • Kullanıcıların oyun alanına teleport edilmeden önce bekleyecekleri bir lobide alan oluşturun, böylece kullanıcılar aynı anda başlayabilir.
  • Her turda kazananları 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.