Skor poin

*Konten ini diterjemahkan menggunakan AI (Beta) dan mungkin mengandung kesalahan. Untuk melihat halaman ini dalam bahasa Inggris, klik di sini.

Dalam tutorial sebelumnya, Anda telah membuat berbagai fitur permainan termasuk platform yang memudar dan lava mematikan. Tutorial ini menggabungkan semua itu menjadi permainan yang dapat dimainkan di mana pengguna melihat siapa yang dapat bertahan hidup paling lama. Setiap detik mereka bertahan hidup, satu poin akan ditambahkan ke skor mereka.

Siapkan

Pertama, Anda perlu menyiapkan adegan untuk permainan Anda. Duplikat platform yang memudar yang Anda buat di tutorial sebelumnya dan biarkan pengguna bersaing untuk tetap berada di papan platform selama mungkin.

Anda juga dapat menggunakan lava mematikan untuk membunuh pengguna ketika mereka jatuh dari platform, atau cukup biarkan mereka jatuh ke kehampaan. Pastikan Anda menempatkan SpawnLocation di suatu tempat di mana pengguna dapat melompat ke platform untuk mulai bermain.

Titik spawn di atas grid platform yang memudar, di atas lantai lava

Poin pemain

Roblox memiliki Leaderboard bawaan untuk menampilkan statistik pengguna. Ketika Anda mengatur poin pemain melalui leaderboard, mereka akan muncul di sisi kanan layar dalam permainan.

Leaderboard dengan nama pengguna dan poin yang ditampilkan

Anda akan belajar lebih banyak cara yang dapat disesuaikan untuk menampilkan informasi di tutorial selanjutnya, tetapi leaderboard adalah cara termudah untuk membuat sistem penilaian yang terlihat di Roblox.

Sebaiknya letakkan skrip yang mengatur status permainan ke dalam ServerScriptService karena mereka akan secara otomatis dijalankan saat permainan dimulai. Di ServerScriptService, buat skrip bernama SetupPoints.

Skrip SetupPoints di tempat di ServerScriptService di jendela Explorer

Dengarkan pemain

Di Roblox, layanan adalah objek yang melakukan berbagai fungsi berguna. Layanan Players memiliki sebuah acara yang disebut PlayerAdded yang dapat Anda gunakan untuk mengatur poin bagi setiap pengguna yang bergabung dengan permainan.

Anda dapat mengakses layanan dengan fungsi GetService di objek game. game adalah variabel yang dapat diakses dari mana saja yang berisi segala sesuatu dalam permainan Anda.

  1. Buat variabel untuk layanan Players menggunakan game:GetService("Players").

  2. Buat fungsi bernama onPlayerAdded dengan parameter untuk pemain yang masuk.

  3. Hubungkan fungsi onPlayerAdded ke acara PlayerAdded.

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

Buat folder statistik

Untuk membuat poin pengguna ditampilkan di leaderboard, yang perlu Anda lakukan adalah membuat Folder baru di objek Player mereka yang disebut "leaderstats" dan menempatkan poin mereka di sana. Objek baru dapat dibuat dari dalam skrip melalui fungsi Instance.new().

  1. Buat objek Folder baru menggunakan Instance.new("Folder"), menyimpan hasilnya dalam variabel baru bernama leaderstats.

    local function onPlayerAdded(player)
    local leaderstats = Instance.new("Folder")
    end
  2. Atur properti Name dari leaderstats menjadi "leaderstats".

  3. Parent leaderstats ke player.

    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)

Buat poin

Sistem leaderboard membaca nilai apa pun di folder leaderstats dan menampilkan apa pun yang ditemukannya.

Untuk menambahkan statistik yang akan melacak poin pemain, objek IntValue baru dapat diparentkan ke folder leaderstats. Nama objek nilai akan ditampilkan di samping nilai saat ini.

  1. Gunakan variabel bernama points untuk membuat objek IntValue baru menggunakan Instance.new().
  2. Atur Name menjadi "Points".
  3. Atur Value menjadi 0; ini adalah apa yang akan ditampilkan leaderboard untuk pemain pada awalnya.
  4. Parent objek points ke folder leaderstats.
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)

Uji permainan Anda dan Anda harus melihat leaderboard muncul di sudut kanan atas dengan nama pengguna Anda dan skor poin di samping mereka.

Hitung waktu

Setiap pengguna harus mendapatkan satu poin untuk setiap detik mereka hidup. Sebuah while loop dan fungsi task.wait() dapat digunakan untuk memperbarui nilai poin setiap detik.

  1. Di akhir skrip, buat while loop dengan true sebagai kondisinya.
  2. Di dalam loop, task.wait() selama 1 detik.
Players.PlayerAdded:Connect(onPlayerAdded)
while true do
task.wait(1)
end

Daftar pemain

Untuk menjalankan kode untuk setiap pengguna dalam permainan, Anda perlu mengiterasi melalui array pengguna yang dikembalikan oleh fungsi GetPlayers.

Array adalah daftar item yang disimpan dalam urutan. Setiap item dapat diakses dengan posisi indeks-nya, dimulai dari 1. Anda dapat mendapatkan panjang array dengan menambahkan # di depannya.

  1. Simpan hasil dari Players:GetPlayers() dalam variabel playerList.
  2. Buat for loop dengan nilai awal 1 dan nilai akhir #playerList, sehingga Anda mendapatkan satu iterasi loop per pemain.
while true do
task.wait(1)
local playerList = Players:GetPlayers()
for currentPlayer = 1, #playerList do
-- Tambahkan logika Anda di sini untuk setiap pemain dalam playerList
end
end

Berikan poin

Untuk memberikan satu poin kepada setiap pengguna dalam loop for, Anda perlu mengambil pengguna dari array dan menambahkan 1 ke objek Points yang disimpan di folder leaderstats mereka.

Objek yang disimpan dalam array diakses menggunakan kurung siku - misalnya, item pertama dalam array playerList dapat diakses dengan playerList[1]. Jika Anda menulis playerList[currentPlayer] dalam loop for, Anda dapat bergerak melalui setiap pengguna dalam daftar dengan setiap iterasi loop.

  1. Simpan pengguna di playerList[currentPlayer] dalam variabel bernama player.
  2. Simpan objek Points pengguna dalam variabel bernama points.
  3. Atur properti Value dari points menjadi points.Value + 1.
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

Uji permainan Anda dan Anda harus menemukan bahwa leaderboard menunjukkan skor pemain Anda bertambah 1 setiap detik.

Dengarkan karakter

Tujuan permainan ini adalah untuk melihat siapa yang dapat bertahan hidup paling lama, jadi pengguna yang mati perlu memiliki poin mereka direset menjadi 0.

Anda perlu mendapatkan model Karakter untuk pengguna agar dapat mendeteksi kapan mereka telah mati. Model ini hanya ditambahkan ke permainan setelah objek Player dimuat dan Anda dapat menggunakan acara CharacterAdded untuk mendengarkan kapan karakter siap digunakan. Buat fungsi bernama onCharacterAdded dengan dua parameter: satu untuk karakter, satu untuk pemain.

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

Meskipun Anda menyertakan pengguna dalam parameter fungsi onCharacterAdded, acara CharacterAdded yang sebenarnya hanya mengembalikan karakter, bukan pengguna yang terkait. Untuk meneruskan objek player juga, gunakan fungsi anonim untuk koneksi acara.

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

Reset poin

Ketika seorang pengguna mati, Humanoid secara otomatis memicu acara Died. Anda dapat menggunakan acara ini untuk mengetahui kapan harus mereset poin mereka.

Humanoid ditemukan di dalam model Karakter, tetapi konten model itu hanya dirakit saat pengguna muncul. Untuk membuat kode Anda menunggu dengan aman objek Humanoid dimuat, gunakan fungsi WaitForChild(). Anda dapat memanggilnya pada objek induk mana pun, dengan melewatkan nama string dari anak yang Anda tunggu. Buat variabel untuk menunggu Humanoid menggunakan character:WaitForChild("Humanoid").

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

Fungsi yang perlu Anda hubungkan ke acara Died sangat pendek dan hanya akan pernah dibutuhkan di sini, jadi Anda dapat menggunakan fungsi anonim lagi.

  1. Hubungkan fungsi anonim baru ke acara Died dari Humanoid.
  2. Dalam fungsi anonim, buat variabel bernama points untuk objek Points pemain.
  3. Atur properti Value dari points menjadi 0.
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

Uji ini dan Anda akan melihat skor pengguna direset ketika mereka mati.

Periksa pemain

Jika pengguna terus mendapatkan poin bahkan ketika mati, itu tidak sesuai dengan semangat permainan, jadi kode perlu memeriksa apakah pengguna masih hidup sebelum memberikan poin.

Anda perlu mulai dengan mendefinisikan sebuah atribut dalam fungsi onPlayerAdded yang dapat digunakan untuk memeriksa apakah pengguna masih hidup. Pada titik ini, pengguna belum hidup dan muncul, karena model karakter mereka masih perlu ditambahkan.

Atribut memungkinkan Anda untuk menyesuaikan objek di Roblox dengan data Anda sendiri. Sebuah atribut terdiri dari nama dan nilai. Anda dapat membuat satu pada objek mana pun menggunakan fungsi SetAttribute. Panggil SetAttribute pada player untuk membuat atribut baru bernama "IsAlive" dengan nilai false.

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

Setelah model karakter pengguna muncul kembali, nilai IsAlive perlu diubah menjadi true sehingga pengguna dapat mulai mendapatkan poin lagi.

  1. Di onCharacterAdded, atur atribut IsAlive dari player menjadi true.
  2. Di onCharacterDied, atur atribut IsAlive dari player menjadi false.
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

Akhirnya, IsAlive harus diperiksa sebelum poin diberikan dalam while loop di akhir skrip. Fungsi GetAttribute mengambil nama atribut dan mengembalikan nilainya. Dalam while loop, bungkus kode untuk memberikan poin dalam pernyataan if dengan kondisi player:GetAttribute("IsAlive").

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

Uji permainan Anda sekarang dan Anda harus menemukan bahwa pengguna mendapatkan poin setiap detik mereka hidup, dan tetap di 0 ketika tidak hidup. Ajak teman-teman Anda bermain bersama dan lihat siapa yang bisa mendapatkan skor tertinggi.

Ini baru permulaan: Anda dapat terus meningkatkan permainan Anda untuk pengguna Anda. Berikut adalah beberapa tips:

  • Tempatkan kode untuk semua platform ke dalam satu skrip, sehingga lebih mudah untuk diperbarui.
  • Buat area lobi di mana pengguna menunggu untuk dipindahkan ke area permainan, memungkinkan pengguna untuk mulai secara bersamaan.
  • Umumkan pemenang setiap putaran.

Kode akhir

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, logo Roblox, dan Powering Imagination termasuk dalam merek dagang kami yang terdaftar dan tidak terdaftar di AS dan negara lainnya.