อื่น ๆ / หากฝึกด้วยการให้คะแนน

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

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

การติดตั้งโครงการ

ส่วนที่ให้คะแนนสามารถเพิ่มได้ในโครงการใด ๆ ที่มีคะแนนเกี่ยวข้อง อินสแตนซ์เกมผจญภัยที่ผู้เล่นเก็บคะแนน

ติดตามจุด

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

  1. สร้างสคริปใหม่ใน ServerScriptService ที่มีชื่อว่า Leaderboard คัดลอกและวางรหัสในสคริป


    --ใน ServerScriptService สร้างสคริปต์ที่มีชื่อว่า PlayerSetup ด้วยเนื้อหาด้านล่าง
    local Players = game:GetService("Players")
    local function onPlayerJoin(player)
    local leaderstats = Instance.new("Folder")
    leaderstats.Name = "leaderstats"
    leaderstats.Parent = player
    -- ตัวอย่างของ IntValue
    local points = Instance.new("IntValue")
    points.Name = "Points"
    points.Value = 0
    points.Parent = leaderstats
    end
    -- วิ่งเมื่อเหตุการณ์ PlayerAdded เปิดใช้งาน
    Players.PlayerAdded:Connect(onPlayerJoin)

ส่วนที่เปลี่ยนสี

สคริปต์จะทำงานผ่านสามสีที่แตกต่างกันสำหรับชิ้นส่วน แต่ละสีจะมีตัวแปรที่เก็บค่า RGB ของมันไว้ เป็นชนิดข้อมูลที่รวมชุดของสามตัวเลข (สีแดง สีเขียว สีฟ้า) ที่สร้างสี

  1. สร้างชิ้นส่วนที่มีชื่อว่า PointPart ด้วยสคริปติดตั้งชื่อว่า PointScript

  2. ใน PointScript ใช้ script.Parent เพื่ออ้างถึงส่วน


    local pointPart = script.Parent
  3. สร้างแปรที่เก็บสีที่แตกต่างกัน แต่ละแปรควรถูกตั้งเป็น Color3.fromRGB() ซึ่งสร้างค่าสี

    • สีน้ําเงิน (แต้มบาง): (0, 0, 255)
    • สีเขียว (แต้มมาก): (0, 255, 0)
    • สีแดง (เสียคะแนน): (255, 0, 0)

    local pointPart = script.Parent
    -- สี
    local blue = Color3.fromRGB(0, 0, 255)
    local green = Color3.fromRGB(0, 255, 0)
    local red = Color3.fromRGB(255, 0, 0)
  4. เพิ่มตัวแปรสำหรับจุดเล็ก ๆ น้อย ๆ จำนวนมากขึ้น และตัวแปรสำหรับจุดมากขึ้นสามตัวที่จะลบออก


    -- สี
    local blue = Color3.fromRGB(0, 0, 255)
    local green = Color3.fromRGB(0, 255, 0)
    local red = Color3.fromRGB(255, 0, 0)
    -- มูลค่าตรวจ
    local smallPoints = 10
    local largePoints = 50
    local losePoints = 100

การเพิ่มบริการผู้เล่น

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

คุณสามารถทำได้โดยการเพิ่มบริการ Players ให้กับสคริปของคุณ บริการ Services เป็นชุดของการก่อสร้างล่วงหน้าที่ทำโดยวิศวกรของ Roblox เพื่อประหยัดเวลาของคุณ

  1. รับบริการ ผู้เล่น โดยการพิมพ์:

    local Players = game:GetService("Players")


    -- มูลค่าตรวจ
    local smallPoints = 10
    local largePoints = 50
    local losePoints = 100
    -- ต้องการบริการ
    local Players = game:GetService("Players")

ฟังก์ชันและเหตุการณ์

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

  1. สร้างฟังก์ชันใหม่ที่มีชื่อว่า givePoints() และตัวแปรที่มีชื่อว่า player ภายใน เพิ่มคำพิมพ์ที่ใช้สำหรับการทดสอบ


    local Players = game:GetService("Players")
    -- ให้หรือลบแต้ม
    local function givePoints(player)
    print("Giving player points")
    end
  2. ภายใต้นั้นสร้างฟังก์ชันที่สองที่มีชื่อว่า partTouched() ด้วยตัวแปรที่มีชื่อว่า otherPart


    -- ให้หรือลบแต้ม
    local function givePoints(player)
    print("Giving player points")
    end
    -- ตรวจสอบว่าผู้เล่นสัมผัสต้นอ่อนหรือไม่
    local function partTouched(otherPart)
    end
  3. ในตัวฟังก์ชันใช้ตัวฟังก์ชัน GetPlayerFromCharacter() เพื่อตรวจสอบว่ามีผู้เล่นในตัวแปรอื่นหรือไม่


    -- ตรวจสอบว่าผู้เล่นสัมผัสต้นอ่อนหรือไม่
    local function partTouched(otherPart)
    local player = Players:GetPlayerFromCharacter(otherPart.Parent)
    end
  4. หากผู้เล่นแตะต้องส่วนหนึ่ง มันจะถูกเก็บไว้ในแปรที่เป็นตัวผู้เล่น หากไม่เป็นเช่นนั้น แปรจะยังคงเป็นตัวเปล่า

    • ในตัวฟังก์ชันตรวจสอบว่าผู้เล่นมีค่าหรือไม่ หากมีค่าให้ givePoints(player) คุณ
    • ภายใต้การใช้งาน, เชื่อมต่อ partTouched() กับเหตุการณ์ Touched ของ pointPart

    -- ตรวจสอบว่าผู้เล่นสัมผัสต้นอ่อนหรือไม่
    local function partTouched(otherPart)
    -- รับผู้เล่นหากสัมผัสส่วนหนึ่ง
    local player = Players:GetPlayerFromCharacter(otherPart.Parent)
    if player then
    givePoints(player)
    end
    end
    pointPart.Touched:Connect(partTouched)
  5. วิ่ง โครงการ เมื่อผู้เล่นสัมผัสตรงส่วนไหน คุณจะเห็นข้อความในหน้าต่างการออกมาว่า: "Giving player points" เคล็ดลับการแก้ปัญหา:

  • ตรวจสอบว่า "Players" ใน game:GetService("Players") มีตัวอักษรใหญ่และอยู่ในเครื่องหมายกว้าง
  • partTouched() ควรเชื่อมต่อกับเหตุการณ์ของจุด Touched ของจุด

สร้างสีโค้ง

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

  1. ในตอนท้ายของสคริปต์ สร้างขึ้นใหม่เมื่อเงื่อนไขเป็นจริง ซึ่งหมายถึงว่าสแคร์เรอร์จะทำงานตลอดเวลา


    -- ตรวจสอบว่าผู้เล่นสัมผัสต้นอ่อนหรือไม่
    local function partTouched(otherPart)
    -- รับผู้เล่นหากสัมผัสส่วนหนึ่ง
    local player = Players:GetPlayerFromCharacter(otherPart.Parent)
    if player then
    givePoints(player)
    end
    end
    pointPart.Touched:Connect(partTouched)
    -- ห่วงผ่านสี
    while true do
    end
  2. เป็นเจ้าของ, โค้ดสักครู่ที่จริงเป็น do ลูปที่เปลี่ยน pointPart เป็นตัวแปรสีที่คุณได้สร้าง อย่าลืมใช้ task.wait() ระหว่างสี. เมื่อเสร็จสิ้น, ตรวจสอบโค้ดของคุณต่อเวอร์ชันด้านล่าง.


    -- ห่อผ่าน 3 สี รอระหว่างสีแต่ละสี
    while true do
    pointPart.Color = blue
    task.wait(3)
    pointPart.Color = green
    task.wait(2)
    pointPart.Color = red
    task.wait(1)
    end
  3. ทดสอบและตรวจสอบว่าสามสีทั้งหมดทำงานได้โดยไม่หยุด

เคล็ดลับการแก้ปัญหา

ในขณะนี้หากวงจรสีไม่ทำงานตามที่ตั้งใจไว้ให้ลองใช้หนึ่งในตัวเลือกต่อไปนี้

  • ตรวจสอบว่าวงจรซ้ำอยู่ที่ด้านล่างของสคริปต์ ใต้อีเวนต์ Touched หากวงจรไม่อยู่ที่ด้านล่าง มันจะทำให้ส่วนอื่นของสคริปต์ทำงานได้อย่างถูกต้อง
  • ตรวจสอบว่าแต่ละสีใน Color3.fromRGB() เขียนถูกต้องหรือไม่ ต้องมีตัวเลขสามตัวระหว่าง 0 และ 255 ที่แยกด้วยจุลภาคเช่น (255, 50, 0)

ให้คะแนนผู้เล่น

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

การหาสีปัจจุบัน

เมื่อผู้เล่นสัมผัสส่วนหนึ่ง สคริปต์จะต้องรู้สีปัจจุบันของส่วนหนึ่งเพื่อให้ได้รับคะแนนในภายหลัง

  1. ค้นหา givePoints() แล้วแทนที่ข้อความทดสอบของคุณด้วยตัวแปรสำหรับสีปัจจุบันของ pointPart ตัวแปรนี้จะกำหนดว่าผู้เล่นจะได้รับ (หรือสูญเสีย) จุดเท่าไหร่


    local function givePoints(player)
    local currentColor = pointPart.Color
    end
  2. เพื่อส่งผลให้คะแนนของผู้เล่น ตารางอันดับสร้างแปรเพื่อเก็บไว้


    local function givePoints(player)
    local currentColor = pointPart.Color
    local playerStats = player:WaitForChild("leaderstats")
    end
  3. ตารางอันดับ


    local function givePoints(player)
    local currentColor = pointPart.Color
    local playerStats = player:WaitForChild("leaderstats")
    local playerPoints = playerStats:WaitForChild("Points")
    end

ให้หรือลบแต้ม

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

  1. ภายใน givePoints() ภายใต้แปรผงสี, ใช้ if สถานะเพื่อตรวจสอบว่าสีปัจจุบันเป็นสีน้ำเงินและหากเป็นเช่นนั้น จึงเพิ่ม smallPoints ให้กับมูลค่าสถานะปัจจุบันของผู้เล่น


    local function givePoints(player)
    local currentColor = pointPart.Color
    local playerStats = player:WaitForChild("leaderstats")
    local playerPoints = playerStats:WaitForChild("Points")
    if currentColor == blue then
    playerPoints.Value += smallPoints
    end
    end
  2. เพื่อตรวจสอบสีเขียวให้เพิ่มอีกหากเป็นเงื่อนไข หากสีเขียวให้เพิ่มตัวแปร largePoints ให้กับจุดของผู้เล่น


    if currentColor == blue then
    playerPoints.Value += smallPoints
    elseif currentColor == green then
    playerPoints.Value += largePoints
    end
  3. ใช้คำอื่นเพื่อลบจุดหากค่า part ไม่ใช่สีน้ำเงินหรือสีเขียว


    if currentColor == blue then
    playerPoints.Value += smallPoints
    elseif currentColor == green then
    playerPoints.Value += largePoints
    else
    playerPoints.Value -= losePoints
    end
  4. สุดท้าย, ทำลาย ชิ้นส่วนหลังจาก if สถานะ, เพื่อให้สคริปต์ไม่สามารถให้คะแนนออกไป


    if currentColor == blue then
    playerPoints.Value += smallPoints
    elseif currentColor == green then
    playerPoints.Value += largePoints
    else
    playerPoints.Value -= losePoints
    end
    pointPart:Destroy()
  5. ทดสอบและตรวจสอบว่าแต่ละสีให้คะแนนตามที่คาดไว้ แน่ใจว่าจะทดสอบ สาม เงื่อนไขทั้งหมด

ให้ความคิดเห็นแก่ผู้เล่น

จุดส่วนผสมทำงานได้ ตารางอันดับแก้ไขสิ่งนั้นโดยการสร้างอนุภาคเมื่อจุดส่วนผสมถูกทำลาย

การเพิ่มข้อเสนอแนะเมื่อผู้เล่นใช้ส่วนหนึ่งเช่นเสียง การเขย่า หรืออนุภาค ทำให้การโต้ตอบกับวัตถุน่าพึงใจมากขึ้นสำหรับผู้เล่น

การสร้างผลลัพธ์ของอนุภาค

เอฟเฟ็กต์อนุภาคจะเป็นสีเดียวกับชิ้นส่วนเมื่อสัมผัส เนื่องจากสีถูกเก็บไว้ในแปรงค์ต่างๆ จึงสามารถใช้ได้อย่างง่ายดาย

  1. ใน givePoints() ที่ด้านล่างสร้าง ใหม่ ParticleEmitter อินสแตนซ์


    local particle = Instance.new("ParticleEmitter")
    end
  2. ผู้ปล่อยอนุภาคใช้ตารางสีเพื่อควบคุมสีของพวกเขา สร้างตารางสีใหม่และส่งสีปัจจุบันของพวกเขา


    -- ทำลายส่วน
    pointPart:Destroy()
    -- สร้างอนุภาค
    local particle = Instance.new("ParticleEmitter")
    particle.Color = ColorSequence.new(currentColor)
  3. อนุภาคจะต้องเป็นลูกของผู้เล่นที่แตะมัน สร้างแป้นที่มีข้อมูลตัวละครของผู้เล่น จากนั้นปัดตัวแป้นไปยังหัวของผู้เล่น


    local particle = Instance.new("ParticleEmitter")
    particle.Color = ColorSequence.new(currentColor)
    local playerCharacter = player.Character
    particle.Parent = playerCharacter:WaitForChild("Head")
  4. ใช้ task.wait() สำหรับเวลาสองวินาทีแล้วทำลายอนุภาค


    local particle = Instance.new("ParticleEmitter")
    particle.Color = ColorSequence.new(currentColor)
    local playerCharacter = player.Character
    particle.Parent = playerCharacter:WaitForChild("Head")
    task.wait(1)
    particle:Destroy()
  5. ทดสอบเกมและตรวจสอบให้แน่ใจว่าอนุภาคจะติดตามผู้เล่นหลังจากแตะแต่ละสี

เคล็ดลับการแก้ปัญหา

ในขณะนี้หากอนุภาคไม่ทำงานตามที่ตั้งใจไว้ให้ลองใช้หนึ่งในต่อไปนี้

  • สร้างเมื่อสร้างตัวอินสแตนซ์ใหม่ที่ ParticleEmitter เขียนว่า ถูกต้อง เช่นที่แสดงและอยู่ในการอ้างอิง
  • เมื่อปกผิวตัวอนุภาค ให้แน่ใจว่าจะใช้ : ระหว่าง playerCharacter และ WaitForChild() โดยไม่มีช่องว่าง

สำเร็จ PointScript

สามารถอ้างอิงได้ด้านล่างเป็นเวอร์ชันที่เสร็จสิ้นของสคริปต์


local pointPart = script.Parent
--หน่วยความจำภายใน = เกม:GetService("ServerStorage")
-- ให้คะแนนบาง
local blue = Color3.fromRGB(0, 0, 255)
-- ให้แต้มมากขึ้น
local green = Color3.fromRGB(0, 255, 0)
-- ทำให้ผู้เล่นสูญเสียคะแนน
local red = Color3.fromRGB(255, 0, 0)
-- ทองที่มอบให้กับผู้เล่น
local smallPoints = 10
local largePoints = 50
local losePoints = 100
local Players = game:GetService("Players")
local function givePoints(player)
local currentColor = pointPart.Color
local playerStats = player:WaitForChild("leaderstats")
local playerPoints = playerStats:WaitForChild("Points")
-- ให้ทองผู้เล่นตามสีของชิ้นส่วน
if currentColor == blue then
playerPoints.Value += smallPoints
elseif currentColor == green then
playerPoints.Value += largePoints
else
playerPoints.Value -= losePoints
end
-- ทำลายชิ้นส่วน รอสองวินาที แล้วทำลายอนุภาค
pointPart:Destroy()
-- สร้างเอฟเฟกต์ประกายและทำลายมัน
local playerCharacter = player.Character
local particle = Instance.new("ParticleEmitter")
particle.Color = ColorSequence.new(currentColor)
particle.Parent = playerCharacter:WaitForChild("Head")
task.wait(1)
particle:Destroy()
end
local function partTouched(otherPart)
local player = Players:GetPlayerFromCharacter(otherPart.Parent)
if player then
givePoints(player)
end
end
pointPart.Touched:Connect(partTouched)
-- เปลี่ยนสีของชิ้นส่วนตามแปรต่างๆ ต้องอยู่ด้านล่างของสคริปต์
while true do
pointPart.Color = blue
task.wait(4)
pointPart.Color = green
task.wait(3)
pointPart.Color = red
task.wait(2)
end