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.

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.

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.

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.
Buat variabel untuk layanan Players menggunakan game:GetService("Players").
Buat fungsi bernama onPlayerAdded dengan parameter untuk pemain yang masuk.
Hubungkan fungsi onPlayerAdded ke acara PlayerAdded.
local Players = game:GetService("Players")local function onPlayerAdded(player)endPlayers.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().
Buat objek Folder baru menggunakan Instance.new("Folder"), menyimpan hasilnya dalam variabel baru bernama leaderstats.
local function onPlayerAdded(player)local leaderstats = Instance.new("Folder")endAtur properti Name dari leaderstats menjadi "leaderstats".
Parent leaderstats ke player.
local Players = game:GetService("Players")local function onPlayerAdded(player)local leaderstats = Instance.new("Folder")leaderstats.Name = "leaderstats"leaderstats.Parent = playerendPlayers.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.
- Atur Name menjadi "Points".
- Atur Value menjadi 0; ini adalah apa yang akan ditampilkan leaderboard untuk pemain pada awalnya.
- 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.
- Di akhir skrip, buat while loop dengan true sebagai kondisinya.
- Di dalam loop, task.wait() selama 1 detik.
Players.PlayerAdded:Connect(onPlayerAdded)
while true do
task.wait(1)
endDaftar 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.
- Simpan hasil dari Players:GetPlayers() dalam variabel playerList.
- 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
endBerikan 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.
- Simpan pengguna di playerList[currentPlayer] dalam variabel bernama player.
- Simpan objek Points pengguna dalam variabel bernama points.
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
endUji 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)
endReset 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")
endFungsi yang perlu Anda hubungkan ke acara Died sangat pendek dan hanya akan pernah dibutuhkan di sini, jadi Anda dapat menggunakan fungsi anonim lagi.
- Hubungkan fungsi anonim baru ke acara Died dari Humanoid.
- Dalam fungsi anonim, buat variabel bernama points untuk objek Points pemain.
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)
endUji 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)
endSetelah model karakter pengguna muncul kembali, nilai IsAlive perlu diubah menjadi true sehingga pengguna dapat mulai mendapatkan poin lagi.
- Di onCharacterAdded, atur atribut IsAlive dari player menjadi true.
- 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)
endAkhirnya, 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
endUji 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