คะแนนการจัดอันดับ

*เนื้อหานี้แปลโดยใช้ AI (เวอร์ชัน Beta) และอาจมีข้อผิดพลาด หากต้องการดูหน้านี้เป็นภาษาอังกฤษ ให้คลิกที่นี่

ในการกวดวิชาก่อนหน้านี้ คุณสร้างคุณสมบัติที่หลากหลายรวมถึง แพลตฟอร์มที่ซื้อมาใหม่ และ ลาวาที่เสี่ยงอันตราย นี้ การกวดวิชานี้ผูกคุณเข้าด้วยกันเป็นปร

การตั้งค่า

ก่อนอื่น, คุณจะต้องตั้งฉากสำหรับประสบการณ์ของคุณ ดับเบิลผู้เล่นที่ทำในการกวดวิชาก่อนหน้านี้และให้ผู้ใช้แข่งขันกันเพื่ออยู่บนกระดานของแพลตฟอร์มนานที่สุด

คุณยังสามารถใช้ ลาวาที่เสี่ยงต่อการฆ่าผู้ใช้ เพื่อฆ่าผู้ใช้เมื่อพวกเขาตกออกจากแพลตฟอร์มหรือเพียงแค่ปล่อยให้พวกเขาตกลงไปสู่ความตาย ให้แน่ใจว่าคุณวาง SpawnLocation ที่ใด

แต้มผู้เล่น

Roblox มี Leaderboard ติดตั้งอยู่เพื่อแสดงสถิติของผู้ใช้ เมื่อคุณตั้งค่าคะแนนผู้เล่นผ่าน ตารางอันดับพวกเขาจะปรากฏขึ้นทางด้านขวาของหน้าจอในประสบการณ์

Leaderboard with username and points shown

คุณจะได้เรียนรู้วิธีการแสดงผลที่ปรับแต่งเองได้มากขึ้นในการฝึกสอนในภายหลัง แต่ลีดเดอร์บอร์ดเป็นวิธีที่เรียบง่ายที่สุดในการสร้างระบบจัดอันดับที่มองเห็นได้ใน Roblox

ดีที่สุดที่จะใส่สคริปที่ติดตั้งสถานะประสบการณ์ใน ServerScriptService เพราะพวกเขาจะทำงานอัตโนมัติเมื่อประสบการณ์เริ่มขึ้น ใน ServerScriptService สร้างสคริปที่มีชื่อว่า SetupPoints

SetupPoints script in place in ServerScriptService in the Explorer window

ฟังผู้เล่น

ใน Roblox, บริการ เป็นวัตถุที่ประสบความสำเร็จซึ่งประกอบด้วยหลายรายการของคุณสมบัติที่มีประโยชน์ บริการ Class.Players มีอีเวนต์ที่มีชื่อว่า Class.Players.PlayerAdded|PlayerAdded

คุณสามารถเข้าถึงบริการด้วยฟังก์ชัน GetService ในตัวอุปกรณ์ game สิ่งนี้เป็นตัวแปรที่สามารถเข้าถึงได้จากทุกที่ที่มีทุกอย่างในประสบการณ์ของ

  1. สร้างตัวแปรสำหรับบริการผู้เล่นโดยใช้ game:GetService("Players")

  2. สร้างฟังก์ชันที่มีชื่อว่า onPlayerAdded ด้วยตัวแปรสำหรับผู้เล่นที่เข้ามา

  3. เชื่อมต่อฟังก์ชัน onPlayerAdded ไปยังเหตุการณ์ PlayerAdded


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

สร้างไดเรกทอรีสถิติ

ตารางอันดับFolder ใหม่ในวัตถุ Player ของพวกเขาที่เรียกว่า #le

  1. สร้างวัตถุใหม่ Folder โดยใช้ Instance.new("Folder") เก็บผลลัพธ์ในตัวแปรใหม่ที่มีชื่อว่า leaderstats


    local function onPlayerAdded(player)
    local leaderstats = Instance.new("Folder")
    end
  2. ตั้งค่าค่าชื่อของ leaderstats เป็น "leaderstats"

  3. พ่อ leaderstats ถึง 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)

การสร้างแต้ม

ระบบลีดเดอร์บอร์ดอ่านค่าใด ๆ ในโฟลเดอร์ leaderstats และแสดงผลลัพธ์ที่พบ

เพื่อเพิ่มสถิติที่จะติดตามคะแนนของผู้เล่นให้กับไดอารี่ IntValue ใหม่สามารถเป็นลูกพี่ลูกน้องของไดอารี่ leaderstats ได้ ชื่อของวัตถุมีค่าจะปรากฏร่วมกับมูลค่าปัจจุบันของม

  1. ใช้แปรที่มีชื่อว่า points เพื่อสร้างวัตถุใหม่ IntValue โดยใช้ Instance.new()
  2. ตั้งค่า Name ให้เป็น "Points"
  3. ตั้งค่า Value เป็น 0 นี่คือสิ่งที่ลีดเดอร์บอร์ดจะแสดงให้ผู้เล่นเห็นในตอนแรก
  4. เป็นพ่อของวัตถุ points ในไดเรกทอรี 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)

ทดสอบประสบการณ์ของคุณและคุณควรเห็นกระดานผู้นำปรากฏขึ้นด้านขวาบนด้วยชื่อผู้ใช้ของคุณและคะแนนสนทนาต่อหน้าพวกเขา

นับเวลา

ผู้ใช้แต้มทุกคนควรได้รับคะแนนสําหรับแต่ละวินาทีที่พวกเขายังมีชีวิตอยู่ สายลูกศร while และการทํางาน task.wait() สามารถใช้เพื่อปรับปรุงค่าของแต้มทุกวินาที

  1. ในตอนท้ายของสคริปต์, สร้าง while ลูปด้วย true เป็นเงื่อนไข
  2. ในล็อป, task.wait() สำหรับ 1 วินาที

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

รายชื่อผู้เล่น

เพื่อดำเนินการโค้ดสำหรับผู้ใช้ในประสบการณ์นี้คุณต้องทำซ้ำผ่าน รายการ ของผู้ใช้ที่กลับโดย GetPlayers ฟังก์ชัน

รายการเป็นรายการของรายการที่เก็บไว้ในลำดับ แต่ละรายการสามารถเข้าถึงได้โดยตำแหน่ง ของมัน เริ่มต้นจาก 1 คุณสามารถรับความยาวของรายการได้โดยการเรียกแรงขอ

  1. เก็บผลลัพธ์ของ Players:GetPlayers() ในตัวแปร playerList
  2. สร้าง สําหรับ ห่วงโซ่ด้วยมูลค่าเริ่มต้นของ 1 และมูลค่าสิ้นสุดของ #playerList เพื่อให้คุณได้รับหนึ่งการเรียกใช้ของห่วงโซ่ต่อผู้เล่น

while true do
task.wait(1)
local playerList = Players:GetPlayers()
for currentPlayer = 1, #playerList do
-- เพิ่มสูตรของคุณที่นี่สำหรับผู้เล่นใน playerList
end
end

การให้คะแนน

เพื่อให้คะแนนผู้ใช้ในแต่ละบัญชีในสแน็ปโดยใช้แท็งก์ของพวกเขา คุณจะต้องเอาผู้ใช้ออกจากแท็งก์ และเพิ่ม 1 ใน leaderstats วัตถุที่เก็บไว้ในโฟลเดอร์ leaderstats ของพวกเขา

วัตถุที่เก็บไว้ใน mat阵สามารถเข้าถึงได้โดยใช้ เครื่องหมายกว้างขวาง - อินสแตนซ์, รายการแรกใน mat阵 playerList สามารถเข้าถึงได้ด้วย

  1. เก็บผู้ใช้ที่ playerList[currentPlayer] ในแปรที่มีชื่อว่า player
  2. เก็บรวบรวม คะแนนของผู้ใช้ ในตัวแปรที่มีชื่อว่า points
  3. ตั้งค่าสมบัติของ Value ของ points เป็น 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

ทดสอบประสบการณ์ของคุณและคุณควรพบว่าลีดเดอร์บอร์ดแสดงคะแนนของผู้เล่นของคุณเพิ่มขึ้น 1 ทุกวินาที

ฟังตัวละคร

เป้าหมายของประสบการณ์คือการดูว่าใครสามารถอยู่รอดได้นานที่สุดดังนั้นผู้ใช้ที่ตายจะต้องมีแต้มรีเซ็ตเป็น 0

คุณจะต้องรับรุ่น ตัวละคร สำหรับผู้ใช้เพื่อตรวจจับเมื่อพวกเขาตาย ผู้เล่น


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

แม้ว่าคุณจะรวมผู้ใช้ในสมบัติของฟังก์ชัน onCharacterAdded แต่การเหตุการณ์จริง CharacterAdded เพียงแค่ส่งคืนตัวละครไม่ใช่ผู้ใช้ที่เกี่ยวข้อง เพื่อ


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

รีเซ็ตจุด

เมื่อผู้ใช้ตาย, Humanoid จะเริ่มต้นการโหมดเหตุการณ์ Died โดยอัตโนมัติ คุณสามารถใช้เหตุการณ์นี้เพื่อค้นหาเมื่อใดจะรีเซ็ตจุดของพวกเขา

Humanoid ตั้งอยู่ภายในโมเดลตัวละคร แต่เนื้อหาของโมเดลนั้นจะถูกรวบรวมเฉพาะเมื่อผู้ใช้เรียกตัวเองสปอน เพื่อให้โค้ดของคุณป


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

หน้าต่างที่คุณต้องการเชื่อมต่อกับเหตุการณ์ที่ตายจะสั้นมากและจะมีเฉพาะที่นี่เท่านั้นดังนั้นคุณจึงสามารถใช้หน้าต่างอนามัยอีกครั้ง

  1. เชื่อมต่อคุณสมบัติใหม่ที่ไม่ระบุชื่อให้กับอีเวนต์ ตาย ของมนุษย์
  2. ในคุณสมบัติที่ไม่ระบุชื่อ, สร้างตัวแปรที่มีชื่อว่า points สำหรับวัตถุ คะแนน ของผู้เล่น
  3. ตั้งค่าสมบัติของ Value ของ points เป็น 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

ทดสอบสิ่งนี้และคะแนนของผู้ใช้จะรีเซ็ตเมื่อพวกเขาตาย

ตรวจสอบผู้เล่น

หากผู้ใช้ยังคงได้รับแต้มแม้ว่าพวกเขาจะตาย, มันเกือบจะไม่ในวิญญาณของประสบการณ์ดังนั้นจึงจำเป็นต้องตรวจสอบว่าผู้ใช้มีชีวิตอยู่ก่อนที่จะมอบรางวัลแต้ม

คุณต้องเริ่มต้นด้วยการกำหนด ค่าตัวละคร ใน onPlayerAdded ฟังก์ชันที่สามารถใช้เพื่อตรวจสอบว่าผู้ใช้มีชีวิตหรือไม่ ในขณะนี้ผู้ใช้ยังไม่ได้เกิดและสปอน เนื่องจากรุ่

คุณสมบัติให้คุณสามารถปรับแต่งวัตถุใน Roblox ด้วยข้อมูลของคุณเอง คุณสมบัติประกอบด้วยชื่อและมูลค่า


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

เมื่อตัวละครของผู้ใช้เกิดใหม่อีกครั้ง, มูลค่าของ IsAlive จะต้องเปลี่ยนเป็น true เพื่อให้ผู้ใช้สามารถเริ่มรับคะแนนได้อีก

  1. ใน onCharacterAdded ตั้งค่าค่า IsAlive ของ player ให้เป็น 1> true1>
  2. ใน onCharacterDied ตั้งค่าค่า IsAlive ของ player เป็น 1> ปลอม1>

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

ในที่สุด, IsAlive ควรจะได้รับการตรวจสอบก่อนที่จะได้รับรางวัลใด ๆ ใน while


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

ทดสอบประสบการณ์ของคุณตอนนี้และคุณควรพบว่าผู้ใช้ได้รับคะแนนทุกวินาทีที่พวกเขามีชีวิตอยู่และอยู่ที่ 0 เมื่อพวกเขาไม่มีชีวิต

นี่เเค่เป็นจุดเริ่มต้น: คุณสามารถดำเนินการปรับปรุงประสบการณ์ของคุณสำหรับผู้ใช้ของคุณ นี่คือเคล็ดลับบางอย่าง:

  • อัปเดต
  • สร้างพื้นที่ล็อบบี้ที่ผู้ใช้รอเพื่อได้รับการเคลื่อนย้ายไปยังพื้นที่ประสบการณ์, เพื่อให้ผู้ใช้เริ่มได้ในเวลาเดียวกัน
  • ประกาศผู้ชนะในแต่ละรอบ

รหัสสุดท้าย


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