สคริปต์ปุ่มอัปเกรด

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


ผู้เล่นตอนนี้สามารถเก็บเหรียญและสูญเสียเหรียญเมื่อพวกเขาตาย แต่เหรียญไม่ทำอะไร และโลกเกมส่วนใหญ่ยังไม่สามารถเข้าถึงได้โดยไม่มีความสามารถในการกระโดดสูง ส่วนนี้ของ

สร้างปุ่มอัปเกรด

2D ใน Roblox โดยทั่วไปประกอบด้วยการรวมกันของ GUI ส่วนประกอบภายในของ GUI คอนเทนเนอร์ ในกรณีนี้คุณต้องการส่วนประกอบ TextButton เท่านั้นที่พูดว่า อัปเกรด

เพื่อสร้าง GUI:

  1. ใน หน้าต่าง Explorer เพิ่มโฟลเดอร์ใหม่ใน ReplicatedStorage แล้วเปลี่ยนชื่อโฟลเดอร์เป็น Instances ตัวอักษรใด ๆ ใน 1> ReplicatedStorage1> สามารถเข้าถึงได้จากแต่ละผู้เล่นที่เ
  2. เพิ่ม ScreenGui วัตถุในโฟลเดอร์ Instances 3. เลือก ScreenGui วัตถุ แล้วใน หน้าต่างโปรพีเพอร์ตี้ วินโดว์
    1. ตั้ง ชื่อ ให้ JumpPurchaseGui 2. ปิดการใช้งาน ResetOnSpawn เพื่อให้แน่ใจว่า GUI จะอยู่ในระดับโพ่งของผู้เล่นเมื่อพวกเขาเกิดใหม่
  3. ใน หน้าต่าง Explorer ใส่ TextButton ใน คอนเทนเนอร์ JumpPurchaseGui แล้วเปลี่ยนชื่อปุ่มเนื้อหาให้เป็น 1> JumpButton1>
  4. (อpcional) ปรับแต่งรูปลักษณ์และตำแหน่งปุ่มด้วยการกำหนดค่าสมบัติของมัน ข้อเสนอแนะง่ายๆ ได้แก่:
    • ตั้งค่าสมบัติข้อความเป็น ข้อความข้างขวา (5 เหรียญ) * ตั้งค่าสมบัติข้อความ TextSize ให้เป็น 25 * ตั้ง อันคู่เสาะ เป็น 1, 1 และตำแหน่งเป็น 1, 0,1, 0 เพื่อย้ายปุ่มไปที่มุมล่างขวา

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

กำหนดข้อมูลอํานาจการกระโดด

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

เพื่ออัปเดตสคริปต์ PlayerData เพื่อเก็บความสามารถในการกระโดด:

  1. ในหน้าต่าง เอ็กซ์พลอเตอร์ เปิดสคริปต์โมดูล PlayerData ใน ServerStorage 2. แทนที่โค้ดในสคริปด้วยตัวอย่างต่อไปนี้ซึ่งเริ่มต้นค่า Jump สำหรับผู้เล่นแต่ละรายรวมกับมูลค่า Coins ปัจจุบันของพวกเขา:


    local PlayerData = {}
    PlayerData.COIN_KEY_NAME = "Coins"
    PlayerData.JUMP_KEY_NAME = "Jump"
    local playerData = {
    --[[
    [userId: string] = {
    ["Coins"] = coinAmount: number,
    ["Jump"] = jumpPower: number
    }
    --]]
    }
    local DEFAULT_PLAYER_DATA = {
    [PlayerData.COIN_KEY_NAME] = 0,
    [PlayerData.JUMP_KEY_NAME] = 0,
    }
    local function getData(player)
    local data = playerData[tostring(player.UserId)] or DEFAULT_PLAYER_DATA
    playerData[tostring(player.UserId)] = data
    return data
    end
    function PlayerData.getValue(player, key)
    return getData(player)[key]
    end
    function PlayerData.updateValue(player, key, updateFunction)
    local data = getData(player)
    local oldValue = data[key]
    local newValue = updateFunction(oldValue)
    data[key] = newValue
    return newValue
    end
    return PlayerData

อัปเดตข้อมูลการกระโดด

ตอนนี้ PlayerData สามารถติดตามพลังกระโดดได้, คุณจำเป็นต้องใช้โลจิกในเซิร์ฟเวอร์เพื่ออัปเกรดพลังกระโดดจากคำขอของผู้เล่น

เซิร์ฟเวอร์และคลายเฉพาะสามารถสื่อสารผ่านทาง เหตุการณ์ระยะไกล หรือ ระบบความสนุกระยะไกล ได้ เหตุการณ์ระยะไกลไม่สามารถผลิตได้เมื

อัปเกรด:

  1. ใน หน้าต่าง Explorer เปิด โฟลเดอร์ Instances ใน ReplicatedStorage

  2. ใส่ RemoteFunction ในโฟลเดอร์ ตัวแก้ไข แล้วเปลี่ยนชื่อระยะไกลเป็น IncreaseJumpPowerFunction ตัวระยะไกลจะสร้างระยะไกลใน 1> ReplicatedStorage1> เสมอเพราะทั้งลูกค้าและเซิร์ฟเวอร์ต้อง

    Studio's Explorer window with the IncreaseJumpPowerFunction script highlighted under the Instances folder.
  3. ใน หน้าต่าง Explorer เลือก StarterPlayer

  4. ใน หน้าต่างโปรพีเพอร์ตี้ เปิด ใช้ สิทธิ์ ตัวละคร ใช้ สิทธิ์ ตัวละคร ใช้ สิทธิ์ ตัวละคร ใช่ โดย ปกติ มูลค่า การกระโดด ของ ตัวละคร ไม่ ได้ จะ ต้อง เปิด เปิด เปิด เปิด เปิ

  5. ใน หน้าต Explorer ของคุณใส่สคริปต์ใหม่ลงใน ServerScriptService แล้วเปลี่ยนชื่อสคริปต์เป็น 1> JumpService1> สคริปต์นี้จะประกอบด้วยโลจิกสำหรับการอัพเกรดการกระโดด

  6. แทนที่รหัสเริ่มต้นด้วยรหัสต่อไปนี้:


    -- บริการ
    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local ServerStorage = game:GetService("ServerStorage")
    local Players = game:GetService("Players")
    -- โมดูล
    local Leaderboard = require(ServerStorage.Leaderboard)
    local PlayerData = require(ServerStorage.PlayerData)
    -- เหตุการณ์
    local IncreaseJumpPowerFunction = ReplicatedStorage.Instances.IncreaseJumpPowerFunction
    local JUMP_KEY_NAME = PlayerData.JUMP_KEY_NAME
    local COIN_KEY_NAME = PlayerData.COIN_KEY_NAME
    local JUMP_POWER_INCREMENT = 30
    local JUMP_COIN_COST = 5
    local function updateJumpPower(player, updateFunction)
    -- ปรับปรุงตารางอํานาจการกระโดด
    local newJumpPower = PlayerData.updateValue(player, JUMP_KEY_NAME, updateFunction)
    -- อัปเดตพลังการกระโดดของผู้เล่น
    local character = player.Character or player.CharacterAdded:Wait()
    local humanoid = character:FindFirstChildWhichIsA("Humanoid")
    if humanoid then
    humanoid.JumpPower = newJumpPower
    -- ตารางอันดับ
    Leaderboard.setStat(player, JUMP_KEY_NAME, newJumpPower)
    end
    end
    local function onPurchaseJumpIncrease(player)
    local coinAmount = PlayerData.getValue(player, COIN_KEY_NAME)
    if coinAmount < JUMP_COIN_COST then
    return false
    end
    -- เพิ่มความกระโดดของผู้เล่น
    updateJumpPower(player, function(oldJumpPower)
    oldJumpPower = oldJumpPower or 0
    return oldJumpPower + JUMP_POWER_INCREMENT
    end)
    -- ปรับปรุงตารางเหรียญ
    local newCoinAmount = PlayerData.updateValue(player, COIN_KEY_NAME, function(oldCoinAmount)
    return oldCoinAmount - JUMP_COIN_COST
    end)
    -- ตารางอันดับ
    Leaderboard.setStat(player, COIN_KEY_NAME, newCoinAmount)
    return true
    end
    local function onCharacterAdded(player)
    -- รีเซ็ตพลังการกระโดดของผู้เล่นเมื่อตัวละครถูกเพิ่ม
    updateJumpPower(player, function(_)
    return 0
    end)
    end
    -- เริ่มตัวผู้เล่นที่เพิ่มไว้ก่อนที่จะเชื่อมต่อกับเหตุการณ์ PlayerAdded
    for _, player in Players:GetPlayers() do
    onCharacterAdded(player)
    end
    -- การเริ่มต้นผู้เล่นจากกิจกรรม PlayerAdded ได้
    local function onPlayerAdded(player)
    player.CharacterAdded:Connect(function()
    onCharacterAdded(player)
    end)
    end
    local function onPlayerRemoved(player)
    updateJumpPower(player, function(_)
    return nil
    end)
    end
    IncreaseJumpPowerFunction.OnServerInvoke = onPurchaseJumpIncrease
    Players.PlayerAdded:Connect(onPlayerAdded)
    Players.PlayerRemoving:Connect(onPlayerRemoved)

    ต่อไปนี้คือส่วนที่อธิบายรายละเอียดของโค้ด

    • อัปเดตข้อมูลการกระโดดของผู้เล่นและลีดเดอ

    • ยืนยันคำขอเซิร์ฟเวอร์ - onPurchaseJumpIncrease() ตรวจสอบก่อนว่าผู้เล่นมีจำนวนเหรียญที่ต้องการซื้ออัพเกรดหรือไม่ การตรวจสอบทั้งหมดจากลูกค้าไป

เพิ่มปุ่มให้กับผู้ใช้ GUI

วัตถุ ScreenGui เฉพาะในหน้าจอเท่านั้นถ้ามันเป็นลูกโดยตรงของวัตถุ PlayerGui จะปรากฏในหน้าจอเท่านั้น โดยปกติสิ่งนี้จะประกอบด้ว

เพื่อเพิ่มปุ่มให้กับ GUI ของผู้เล่นเมื่อพวกเขาเข้าร่วม:

  1. ใน หน้าต่าง Explorer สร้าง Script ใน ReplicatedStorage 2. เลือกสคริปต์แล้วใน หน้าต่าง Proprieties 1. ตั้ง ชื่อ ให้ JumpButtonClickHandler 2. ตั้ง รันคอนเท็กส์ เป็น ลูกค้า นี่บอกเครื่องว่าจะประมวลผลสคริปต์นี้ในลูกค้าเสมอเพื่อเพิ่มประสิทธิภาพการสื่อสารเครือข่าย

  2. ในสคริปต์เปิด แทนที่รหัสเริ่มต้นด้วยรหัสต่อไปนี้:


    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local Players = game:GetService("Players")
    local player = Players.LocalPlayer
    local playerGui = player.PlayerGui
    local IncreaseJumpPowerFunction = ReplicatedStorage.Instances.IncreaseJumpPowerFunction
    local jumpPurchaseGui = ReplicatedStorage.Instances.JumpPurchaseGui
    local jumpButton = jumpPurchaseGui.JumpButton
    local function onButtonClicked()
    local success, purchased = pcall(IncreaseJumpPowerFunction.InvokeServer, IncreaseJumpPowerFunction)
    if not success then
    -- ซื้อจะเป็นข้อความผิดพลาดหากความสำเร็จเป็นเท็จ
    error(purchased)
    elseif success and not purchased then
    warn("Not enough coins!")
    end
    end
    jumpButton.Activated:Connect(onButtonClicked)
    -- เพิ่ม JumpPurchaseGui ใน Gui ของผู้เล่น
    jumpPurchaseGui.Parent = playerGui

    ต่อไปนี้คือส่วนที่อธิบายรายละเอียดของโค้ด

    • รับอ้างอิงไปยัง GUI และการทำงานของเซิร์ฟเวอร์ - ตัวแปร IncreaseJumpPowerFunction , jumpPurchaseGui และ 0> jumpButton0> มีอ้างอิงไปยังการทำงานและ GUI ที่เรียกใช
    • กำหนดตัวเรื่องการจัดการเหตุการณ์ - onButtonClicked() กำหนดโลจิกสำหรับเมื่อผู้ใช้คลิกปุ่มอัปเกรด มันใช้ Global
    • *เชื่อมตัวจัดการกับปุ่มผู้ใช้ * * - อีเวนต์ Activated บนทุกแพลตฟอร์มรวมถึงเมาส์, หน้าจอสัมผัส หรือปุ่มเกมพาด * เมื่อเปิดใช้งา

ทดสอบ

คุณตอนนี้ควรสามารถซื้อการอัพเกรดการกระโดดสําหรับเหรียญโดยใช้ปุ่มอัพเกรด เพื่อทดสอบโครงการ:

  1. ในแถบเมนู คลิกปุ่ม เล่น ปุ่ม Studio จะเข้าสู่โหมดทดสอบการเล่น

    Studio's Home tab with the Play button highlighted in the menu bar.
  2. หากสคริปต์ของคุณทำงานอย่างถูกต้องปุ่มซื้อพลังกระโดดจะปรากฏขึ้นหน้าจอ ลองคลิกปุ่มก่อนที่คุณจะเก็บเหรียญใด ๆ เพื่อตรวจสอบว่าไม่ได้ให้พลังกระโดดเพิ่มเติมแก่คุณ แล้วลองรวบรวมเ

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