Menghitung Skor

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

Dalam tutorial sebelumnya, Anda membuat berbagai fitur pengalaman termasuk fading platforms dan lava berbahaya . Tutorial ini menghubungkan mereka bersama menjadi pengalaman yang dapat dimainkan di mana pengguna melihat siapa yang bisa tetap hidup paling lama. Setiap detik mereka tetap hidup, poin akan ditambahkan ke skor mereka.

Mengatur

Pertama, Anda harus menetapkan adegan untuk pengalaman Anda. Duplikasi fading platforms yang Anda buat di tutorial sebelumnya dan biarkan pengguna bersaing untuk tetap di papan platform selama mungkin.

Anda juga dapat menggunakan lava yang mematikan untuk membunuh pengguna saat mereka jatuh dari platform, atau hanya membiarkan mereka jatuh ke kematian mereka. Pastikan Anda menempatkan SpawnLocation di suatu tempat di mana pengguna dapat melompat ke platform untuk mulai bermain.

Poin Pemain

Roblox memiliki Leaderboard built-in untuk menunjukkan statistik pengguna. Saat Anda menetapkan poin pengguna melalui papan peringkat, mereka muncul di sisi kanan layar dalam pengalaman.

Leaderboard with username and points shown

Anda akan belajar lebih banyak cara yang dapat disesuaikan untuk menampilkan informasi dalam tutorial lanjutan, tetapi papan peringkat adalah cara termudah untuk membuat sistem skor yang terlihat di Roblox.

Sebaiknya menempatkan skrip yang menetapkan status pengalaman ke dalam ServerScriptService karena mereka akan secara otomatis dijalankan saat pengalaman dimulai. Di ServerScriptService, buat skrip bernama SetupPoints .

SetupPoints script in place in ServerScriptService in the Explorer window

Mendengarkan untuk Pemain

Di Roblox, layanan adalah objek yang melakukan berbagai fungsi yang berguna. Players layanan memiliki acara bernama PlayerAdded yang dapat Anda gunakan untuk menetapkan poin untuk setiap pengguna yang bergabung dengan pengalaman.

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

  1. Buat variabel untuk layanan Pemain 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 menampilkan poin pengguna di papan peringkat, yang harus Anda lakukan adalah membuat Folder baru di objek Player mereka bernama "leaderstats" dan menempatkan poin mereka di sana. Objek baru dapat dibuat dari dalam script melalui fungsi 1> Datatype.Instance.new()

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


    local function onPlayerAdded(player)
    local leaderstats = Instance.new("Folder")
    end
  2. Tetapkan property Nama leaderstats menjadi "leaderstats" .

  3. Orang tua 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)

Membuat Titik

Sistem papan peringkat membaca nilai apa pun di leaderstats folder dan menunjukkan apa yang ditemukannya.

Untuk menambahkan stat yang akan melacak poin pemain, objek baru IntValue dapat dikaitkan dengan leaderstats folder. Nama objek nilai akan ditampilkan bersama dengan nilai saat ini.

  1. Gunakan variabel bernama points untuk membuat objek baru IntValue menggunakan Instance.new() .
  2. Tetapkan Name ke "Points" .
  3. Tetapkan Value ke 0 ; ini adalah apa yang papan peringkat akan awalnya menunjukkan untuk pemain.
  4. Ikat objek points ke dinding 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 pengalaman Anda dan Anda seharusnya melihat papan peringkat muncul di bagian atas kanan dengan nama pengguna Anda dan skor poin di sampingnya.

Menghitung Waktu

Setiap pengguna harus mendapatkan poin untuk setiap detik mereka masih hidup. Loop while dan fungsi task.wait() dapat digunakan untuk menyelesaikan nilai poin setiap detik.

  1. Pada akhir script, buat lompatan while dengan true sebagai kondisi.
  2. Dalam loop, task.wait() untuk 1 detik.

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

Daftar Pemain

Untuk mengeksekui kode untuk setiap pengguna dalam pengalaman, Anda perlu mengulang melalui array pengguna yang dikembalikan oleh fungsi GetPlayers.

Sebuah matriks adalah daftar item yang disimpan dalam urutan. Setiap item dapat diakses dengan posisi indeksnya , dimulai dari 1 . Anda dapat mendapatkan panjang matriks dengan # .

  1. Simpan hasil Players:GetPlayers() di variabel playerList.
  2. Buat untuk lari dengan nilai awal 1 dan nilai akhir #playerList , sehingga Anda mendapatkan satu putaran dari lari 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

Menghadiahkan Poin

Untuk menghadiahkan poin ke setiap pengguna di dalam for loop, Anda harus mengeluarkan pengguna dari array dan menambahkan 1 ke objek Titik yang tersimpan di dll mereka leaderstats folder.

Objek yang disimpan dalam matriks dapat diakses menggunakan kurungan persegi - kejadian, item pertama dalam matriks playerList dapat diakses dengan playerList[1]. Jika Anda menulis 1> playerList[currentPlayer]]1> dalam for loop, Anda dapat pindah melalui setiap pengguna dalam daft

  1. Simpan pengguna di playerList[currentPlayer] dalam variabel bernama player .
  2. Simpan objek Titik pengguna di variabel bernama points .
  3. Tetapkan properti Value dari points ke 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 pengalaman Anda dan Anda harus menemukan bahwa papan peringkat menunjukkan skor pemain Anda meningkat dari 1 setiap detik.

Mendengarkan Karakter

Tujuan dari pengalaman ini adalah untuk melihat siapa yang bisa tetap hidup paling lama, jadi pengguna yang mati akan perlu mengatur ulang poin mereka ke 0.

Anda akan perlu mendapatkan model Karakter untuk pengguna agar dapat mendeteksi ketika mereka telah mati. Model ini hanya ditambahkan ke pengalaman setelah objek Player yang telah dimuat dan Anda dapat m


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

Meskipun Anda meng包括 pengguna dalam onCharacterAdded fungsi parAMETER, acara CharacterAdded yang sebenarnya hanya mengembalikan karakter, bukan pengguna yang terkait. Untuk menyampaikan objek player sebagai well, gunakan fungsi 1> anonim1> 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

Mengatur Ulang Poin

Ketika seorang pengguna mati, Humanoid mereka secara otomatis menyetel acara Died. Anda dapat menggunakan acara ini untuk mengetahui kapan waktu setel ulang poin mereka.

Humanoid ditemukan di dalam model Karakter, tetapi konten model itu hanya dibuat saat pengguna bertelur. Untuk membuat kode Anda aman menunggu objek Humanoid load, gunakan fungsi WaitForChild(). Anda dapat meneleponnya di setiap objek orang tua, mengirim


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

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

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

Tes ini dan Anda akan melihat skor pengguna mereka setel ulang saat mereka mati.

Memeriksa Pemain

Jika pengguna terus mendapatkan poin bahkan setelah mati, itu hampir tidak dalam semangat pengalaman, jadi kode perlu memeriksa apakah pengguna masih hidup sebelum memberikan poin.

Anda harus memulai dengan mendefinisikan 属性 di fungsi onPlayerAdded yang dapat digunakan untuk memeriksa apakah pengguna masih hidup. Pada saat ini, pengguna masih tidak hidup dan bertelur, karena model karakter mereka masih perlu ditambahkan.

ribut mengizinkan Anda untuk menyesuaikan objek di Roblox dengan data Anda sendiri. Sebuahтри布 atribut terdiri dari nama dan nilai. Anda dapat membuat satu di setiap objek menggunakan fungsi SetAttribute . Pang


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 respawns, nilai IsAlive perlu diubah menjadi true sehingga pengguna dapat mulai mendapatkan poin lagi.

  1. Dalam onCharacterAdded, tetapkan atribut IsAlive dari player ke 1> true1>.
  2. Dalam onCharacterDied, tetapkan atribut IsAlive dari player ke 1> false1>.

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 seharusnya checked sebelum titik mana pun diperoleh dalam while loop di akhir script. Fungsi 2>pemain.Instance:GetAttribute()|GetAttribute2> meng


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 pengalaman Anda sekarang dan Anda harus menemukan pengguna mendapatkan poin setiap detik mereka hidup, dan tetap di 0 saat tidak hidup. Minta teman Anda bermain dengan Anda dan lihat siapa yang bisa mendapatkan skor tertinggi.

Ini hanya mulai: Anda dapat terus meningkatkan pengalaman Anda untuk pengguna Anda. Berikut adalah beberapa tips:

  • Tempatkan kode untuk semua platform dalam satu script, membuatnya jauh lebih mudah untuk update.
  • Buat area lobi di mana pengguna menunggu untuk diteleportasi ke area pengalaman, memungkinkan pengguna untuk memulai secara bersamaan.
  • Ungkapkan pemenang setiap putaran.

Kode Terakhir


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