ผู้เล่นตอนนี้สามารถเก็บเหรียญและสูญเสียเหรียญเมื่อพวกเขาตาย แต่เหรียญไม่ทำอะไร และโลกเกมส่วนใหญ่ยังไม่สามารถเข้าถึงได้โดยไม่มีความสามารถในการกระโดดสูง ส่วนนี้ของ
สร้างปุ่มอัปเกรด
2D ใน Roblox โดยทั่วไปประกอบด้วยการรวมกันของ GUI ส่วนประกอบภายในของ GUI คอนเทนเนอร์ ในกรณีนี้คุณต้องการส่วนประกอบ TextButton เท่านั้นที่พูดว่า อัปเกรด
เพื่อสร้าง GUI:
- ใน หน้าต่าง Explorer เพิ่มโฟลเดอร์ใหม่ใน ReplicatedStorage แล้วเปลี่ยนชื่อโฟลเดอร์เป็น Instances ตัวอักษรใด ๆ ใน 1> ReplicatedStorage1> สามารถเข้าถึงได้จากแต่ละผู้เล่นที่เ
- เพิ่ม ScreenGui วัตถุในโฟลเดอร์ Instances 3. เลือก ScreenGui วัตถุ แล้วใน หน้าต่างโปรพีเพอร์ตี้ วินโดว์
- ตั้ง ชื่อ ให้ JumpPurchaseGui 2. ปิดการใช้งาน ResetOnSpawn เพื่อให้แน่ใจว่า GUI จะอยู่ในระดับโพ่งของผู้เล่นเมื่อพวกเขาเกิดใหม่
- ใน หน้าต่าง Explorer ใส่ TextButton ใน คอนเทนเนอร์ JumpPurchaseGui แล้วเปลี่ยนชื่อปุ่มเนื้อหาให้เป็น 1> JumpButton1>
- (อpcional) ปรับแต่งรูปลักษณ์และตำแหน่งปุ่มด้วยการกำหนดค่าสมบัติของมัน ข้อเสนอแนะง่ายๆ ได้แก่:
- ตั้งค่าสมบัติข้อความเป็น ข้อความข้างขวา (5 เหรียญ) * ตั้งค่าสมบัติข้อความ TextSize ให้เป็น 25 * ตั้ง อันคู่เสาะ เป็น 1, 1 และตำแหน่งเป็น 1, 0,1, 0 เพื่อย้ายปุ่มไปที่มุมล่างขวา
คุณจะเพิ่มปุ่มลงใน GUI ของผู้เล่นในภายหลังในการนี้ แต่ก่อนที่คุณจะทำเช่นนั้น คุณต้องการที่จะกำหนดวิธีการและข้อมูลทั้งหมดที่จำเป็นสำหรับปุ่มที่จะทำงาน
กำหนดข้อมูลอํานาจการกระโดด
ขณะนี้เฉพาะจำนวนเหรียญเท่านั้นที่จัดเก็บไว้สําหรับผู้เล่นในโมดูลสคริปต์ PlayerData ของคุณ คุณยังต้องเก็บและปรับปรุงควา
เพื่ออัปเดตสคริปต์ PlayerData เพื่อเก็บความสามารถในการกระโดด:
ในหน้าต่าง เอ็กซ์พลอเตอร์ เปิดสคริปต์โมดูล 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_DATAplayerData[tostring(player.UserId)] = datareturn dataendfunction PlayerData.getValue(player, key)return getData(player)[key]endfunction PlayerData.updateValue(player, key, updateFunction)local data = getData(player)local oldValue = data[key]local newValue = updateFunction(oldValue)data[key] = newValuereturn newValueendreturn PlayerData
อัปเดตข้อมูลการกระโดด
ตอนนี้ PlayerData สามารถติดตามพลังกระโดดได้, คุณจำเป็นต้องใช้โลจิกในเซิร์ฟเวอร์เพื่ออัปเกรดพลังกระโดดจากคำขอของผู้เล่น
เซิร์ฟเวอร์และคลายเฉพาะสามารถสื่อสารผ่านทาง เหตุการณ์ระยะไกล หรือ ระบบความสนุกระยะไกล ได้ เหตุการณ์ระยะไกลไม่สามารถผลิตได้เมื
อัปเกรด:
ใน หน้าต่าง Explorer เปิด โฟลเดอร์ Instances ใน ReplicatedStorage
ใส่ RemoteFunction ในโฟลเดอร์ ตัวแก้ไข แล้วเปลี่ยนชื่อระยะไกลเป็น IncreaseJumpPowerFunction ตัวระยะไกลจะสร้างระยะไกลใน 1> ReplicatedStorage1> เสมอเพราะทั้งลูกค้าและเซิร์ฟเวอร์ต้อง
ใน หน้าต่าง Explorer เลือก StarterPlayer
ใน หน้าต่างโปรพีเพอร์ตี้ เปิด ใช้ สิทธิ์ ตัวละคร ใช้ สิทธิ์ ตัวละคร ใช้ สิทธิ์ ตัวละคร ใช่ โดย ปกติ มูลค่า การกระโดด ของ ตัวละคร ไม่ ได้ จะ ต้อง เปิด เปิด เปิด เปิด เปิ
ใน หน้าต Explorer ของคุณใส่สคริปต์ใหม่ลงใน ServerScriptService แล้วเปลี่ยนชื่อสคริปต์เป็น 1> JumpService1> สคริปต์นี้จะประกอบด้วยโลจิกสำหรับการอัพเกรดการกระโดด
แทนที่รหัสเริ่มต้นด้วยรหัสต่อไปนี้:
-- บริการ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.IncreaseJumpPowerFunctionlocal JUMP_KEY_NAME = PlayerData.JUMP_KEY_NAMElocal COIN_KEY_NAME = PlayerData.COIN_KEY_NAMElocal JUMP_POWER_INCREMENT = 30local JUMP_COIN_COST = 5local 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 thenhumanoid.JumpPower = newJumpPower-- ตารางอันดับLeaderboard.setStat(player, JUMP_KEY_NAME, newJumpPower)endendlocal function onPurchaseJumpIncrease(player)local coinAmount = PlayerData.getValue(player, COIN_KEY_NAME)if coinAmount < JUMP_COIN_COST thenreturn falseend-- เพิ่มความกระโดดของผู้เล่นupdateJumpPower(player, function(oldJumpPower)oldJumpPower = oldJumpPower or 0return oldJumpPower + JUMP_POWER_INCREMENTend)-- ปรับปรุงตารางเหรียญlocal newCoinAmount = PlayerData.updateValue(player, COIN_KEY_NAME, function(oldCoinAmount)return oldCoinAmount - JUMP_COIN_COSTend)-- ตารางอันดับLeaderboard.setStat(player, COIN_KEY_NAME, newCoinAmount)return trueendlocal function onCharacterAdded(player)-- รีเซ็ตพลังการกระโดดของผู้เล่นเมื่อตัวละครถูกเพิ่มupdateJumpPower(player, function(_)return 0end)end-- เริ่มตัวผู้เล่นที่เพิ่มไว้ก่อนที่จะเชื่อมต่อกับเหตุการณ์ PlayerAddedfor _, player in Players:GetPlayers() doonCharacterAdded(player)end-- การเริ่มต้นผู้เล่นจากกิจกรรม PlayerAdded ได้local function onPlayerAdded(player)player.CharacterAdded:Connect(function()onCharacterAdded(player)end)endlocal function onPlayerRemoved(player)updateJumpPower(player, function(_)return nilend)endIncreaseJumpPowerFunction.OnServerInvoke = onPurchaseJumpIncreasePlayers.PlayerAdded:Connect(onPlayerAdded)Players.PlayerRemoving:Connect(onPlayerRemoved)คำอธิบายรหัสต่อไปนี้คือส่วนที่อธิบายรายละเอียดของโค้ด
อัปเดตข้อมูลการกระโดดของผู้เล่นและลีดเดอ
ยืนยันคำขอเซิร์ฟเวอร์ - onPurchaseJumpIncrease() ตรวจสอบก่อนว่าผู้เล่นมีจำนวนเหรียญที่ต้องการซื้ออัพเกรดหรือไม่ การตรวจสอบทั้งหมดจากลูกค้าไป
เพิ่มปุ่มให้กับผู้ใช้ GUI
วัตถุ ScreenGui เฉพาะในหน้าจอเท่านั้นถ้ามันเป็นลูกโดยตรงของวัตถุ PlayerGui จะปรากฏในหน้าจอเท่านั้น โดยปกติสิ่งนี้จะประกอบด้ว
เพื่อเพิ่มปุ่มให้กับ GUI ของผู้เล่นเมื่อพวกเขาเข้าร่วม:
ใน หน้าต่าง Explorer สร้าง Script ใน ReplicatedStorage 2. เลือกสคริปต์แล้วใน หน้าต่าง Proprieties 1. ตั้ง ชื่อ ให้ JumpButtonClickHandler 2. ตั้ง รันคอนเท็กส์ เป็น ลูกค้า นี่บอกเครื่องว่าจะประมวลผลสคริปต์นี้ในลูกค้าเสมอเพื่อเพิ่มประสิทธิภาพการสื่อสารเครือข่าย
ในสคริปต์เปิด แทนที่รหัสเริ่มต้นด้วยรหัสต่อไปนี้:
local ReplicatedStorage = game:GetService("ReplicatedStorage")local Players = game:GetService("Players")local player = Players.LocalPlayerlocal playerGui = player.PlayerGuilocal IncreaseJumpPowerFunction = ReplicatedStorage.Instances.IncreaseJumpPowerFunctionlocal jumpPurchaseGui = ReplicatedStorage.Instances.JumpPurchaseGuilocal jumpButton = jumpPurchaseGui.JumpButtonlocal function onButtonClicked()local success, purchased = pcall(IncreaseJumpPowerFunction.InvokeServer, IncreaseJumpPowerFunction)if not success then-- ซื้อจะเป็นข้อความผิดพลาดหากความสำเร็จเป็นเท็จerror(purchased)elseif success and not purchased thenwarn("Not enough coins!")endendjumpButton.Activated:Connect(onButtonClicked)-- เพิ่ม JumpPurchaseGui ใน Gui ของผู้เล่นjumpPurchaseGui.Parent = playerGuiคำอธิบายรหัสต่อไปนี้คือส่วนที่อธิบายรายละเอียดของโค้ด
- รับอ้างอิงไปยัง GUI และการทำงานของเซิร์ฟเวอร์ - ตัวแปร IncreaseJumpPowerFunction , jumpPurchaseGui และ 0> jumpButton0> มีอ้างอิงไปยังการทำงานและ GUI ที่เรียกใช
- กำหนดตัวเรื่องการจัดการเหตุการณ์ - onButtonClicked() กำหนดโลจิกสำหรับเมื่อผู้ใช้คลิกปุ่มอัปเกรด มันใช้ Global
- *เชื่อมตัวจัดการกับปุ่มผู้ใช้ * * - อีเวนต์ Activated บนทุกแพลตฟอร์มรวมถึงเมาส์, หน้าจอสัมผัส หรือปุ่มเกมพาด * เมื่อเปิดใช้งา
ทดสอบ
คุณตอนนี้ควรสามารถซื้อการอัพเกรดการกระโดดสําหรับเหรียญโดยใช้ปุ่มอัพเกรด เพื่อทดสอบโครงการ:
ในแถบเมนู คลิกปุ่ม เล่น ปุ่ม Studio จะเข้าสู่โหมดทดสอบการเล่น
หากสคริปต์ของคุณทำงานอย่างถูกต้องปุ่มซื้อพลังกระโดดจะปรากฏขึ้นหน้าจอ ลองคลิกปุ่มก่อนที่คุณจะเก็บเหรียญใด ๆ เพื่อตรวจสอบว่าไม่ได้ให้พลังกระโดดเพิ่มเติมแก่คุณ แล้วลองรวบรวมเ
ตอนนี้ที่โค้ดเสร็จสิ้นให้ลองสมดุลเกมด้วยปริมาณและตำแหน่งของเหรียญ หาเหรียญเพิ่มเติมหากเกมรู้สึกช้าเกินไปหรือลบเหรียญออกและวางในสถานที่ท้าทายหากเกมรู้สึกเร็วเกินไปและง่าย