สิ่งนี้นำเราไปสู่ขั้นสุดท้ายของวงจรเกม - ซื้ออัพเกรดโดยการให้ผู้เล่นซื้ออัพเกรดที่เพิ่มขนาดกระเป๋าไอเทมของพวกเขาผู้เล่นสามารถเก็บรวบรวมไอเทมได้มากขึ้นต่อการเดินทางและได้รับทองมากขึ้น
เลือกซื้อ
แต่ละร้านจะมีปุ่มที่ผู้เล่นคลิกเพื่อซื้อกระเป๋าไอเทมขนาดใหญ่ร้านค้าเองจะเป็นส่วนหนึ่งที่มี SurfaceGUI ซึ่งเป็นรายการที่ช่วยให้สามารถเขียนข้อความบนชิ้นส่วนได้
สร้างป้าย
ในพื้นที่ทำงาน สร้างโมเดลใหม่ชื่อว่าร้านค้า
ในร้านค้า สร้างส่วนบล็อกใหม่ที่มีชื่อว่า BuyButton
ในปุ่มซื้อ เพิ่ม GUI พื้นใหม่โดยคลิกที่ + และเลื่อนไปที่ GUI
ใน GUI พื้นผิว เพิ่มฉลากข้อความใหม่ชื่อว่า BuyText ฉลากขนาดเล็กจะปรากฏที่ไหนสักแห่งบนชิ้นส่วน
ขึ้นอยู่กับวิธีที่ชิ้นส่วนถูกสร้างขึ้น ฉลากอาจอยู่ที่อื่นหากคุณไม่เห็นข้อความบนด้านที่คุณต้องการ ไปที่ SurfaceGUI และค้นหาคุณสมบัติใบหน้าเปลี่ยนคุณสมบัตินั้นจนกว่าคุณจะเห็นฉลากข้อความ
เปลี่ยนข้อความป้าย
ตอนนี้ TextLabel เล็กมากและยากสำหรับผู้เล่นที่จะเห็น ต้องมีการขยายให้ใหญ่ขึ้น
ในคุณสมบัติของ BuyText คลิกที่ลูกศรถัดจาก ขนาด เปลี่ยน ความเคลื่อนที่ สำหรับ X (ซ้ายและขวา) และ Y (ขึ้นและลง) เป็น 0
เปลี่ยนเครื่องชั่ง ของ X และ Y เป็น 0.5 เพื่อสร้างสี่เหลี่ยม
เลื่อนขึ้นในคุณสมบัติของ TextLabel และคลิกลูกศรด้านซ้ายของ AnchorPoint ใส่ 0.5 สำหรับ X และ Yการดำเนินการนี้จะเคลื่อนส่วนหนึ่งของฉลากออกจากสายตา แต่คุณจะตำแหน่งมันถูกต้องต่อไป
เลื่อนลงในคุณสมบัติและเปิด ตำแหน่ง เปลี่ยนขนาดของ X และ Y เป็น 0.5 เพื่อให้กล่องอยู่กลาง
ในคุณสมบัติของ BuyText เลื่อนลงและเปลี่ยน ข้อความ เป็นบางสิ่งที่อธิบายได้ อินสแตนซ์: "Buy Larger Bag: 100 gold"
ตรวจสอบ TextScaled เพื่อให้เป็น บน นี้จะปรับขนาดข้อความโดยอัตโนมัติเพื่อให้พอดีกับกล่อง
เพิ่มตัวตรวจจับคลิก
ผู้เล่นจะซื้อไอเทมโดยคลิกที่ร้านค้าแทนที่จะสัมผัสมันเพียงอย่างเดียวสคริปต์จะใช้ตัวตรวจจับการคลิกเพื่อบอกว่าผู้เล่นได้คลิกป้ายร้านหรือไม่ ตัวตรวจจับคลิก เป็นวัตถุที่ช่วยให้ผู้ใช้สามารถโต้ตอบกับบางสิ่งในสภาพแวดล้อมได้ เช่น เปิดประตู
ในปุ่มซื้อเพิ่มตัวตรวจจับคลิก
ในปุ่มซื้อ เพิ่มสคริปต์ใหม่ชื่อ BuyScript และให้ความคิดเห็นที่อธิบายได้
ใน BuyScript สร้างตัวแปรเพื่อเก็บส่วนปุ่มและตัวตรวจจับคลิก
-- ให้ผู้เล่นคลิกปุ่มเพื่อซื้ออัพเกรดที่เพิ่มช่องว่างlocal buyButton = script.Parentlocal clickDetector = buyButton.ClickDetectorสร้างฟังก์ชันใหม่ชื่อ giveUpgrade() ที่ได้รับพารามิเตอร์ชื่อ playerฟังก์ชันจะอัปเกรดพื้นที่ของผู้เล่นทุกครั้งที่พวกเขาคลิกปุ่ม
local buyButton = script.Parentlocal clickDetector = buyButton.ClickDetectorlocal function giveUpgrade(player)endหลังฟังก์ชัน พิมพ์เหตุการณ์การคลิกของตัวตรวจจับ MouseClick ไปยังฟังก์ชัน giveUpgrade()
local function giveUpgrade(player)endclickDetector.MouseClick:Connect(giveUpgrade)เพิ่มคำสั่งพิมพ์ใน giveUpgrade() เพื่อทดสอบฟังก์ชัน
local function giveUpgrade(player)print("Someone clicked the button.")endเล่น โครงการของคุณ คลิกปุ่มและตรวจสอบว่าคุณเห็นข้อความในหน้าต่างเอาต์พุต
เคล็ดลับการแก้ปัญหา
ปัญหา: คุณไม่สามารถคลิกปุ่มหรือเคอร์เซอร์เมาส์ไม่ปรากฏบนปุ่ม
- ตรวจสอบให้แน่ใจว่าวัตถุ ClickDetector เป็นลูกของส่วนที่คุณกำลังพยายามคลิก
- ตรวจสอบว่าตัวละครของคุณอยู่ใกล้ปุ่มพอสมควร หรือตรวจสอบให้แน่ใจว่าเครื่องมือไม่ได้ติดตั้ง
ซื้ออัพเกรด
ด้วยปุ่มทำงานแล้วถึงเวลาที่จะเพิ่มโค้ดลงใน giveUpgrade เพื่อลบทองของผู้เล่นในการแลกเปลี่ยนสําหรับกระเป๋าอัพเกรด
เพิ่มตัวแปรอัพเกรด
แต่ละอัพเกรดจะมีตัวแปรสองตัว: ค่าใช้จ่ายของการอัพเกรดและจำนวนช่องว่างที่มี
ใน BuyScript ภายใต้ local clickDetector , สร้างตัวแปรสองตัว:
- newSpace : จํานวนช่องว่างที่อัปเกรดเพิ่มเมื่อซื้อ
- upgradeCost : อัปเกรด
-- ตัวแปรสำหรับการอัพเกรดlocal newSpaces = 10local upgradeCost = 100
ให้การอัพเกรด
ก่อนที่จะขายผู้เล่นอัพเกรด คุณต้องตรวจสอบว่าพวกเขามีเงินเพียงพอหรือไม่ หากพวกเขาทำ คุณจะเพิ่มจำนวนพื้นที่สูงสุดของพวกเขา
ใน giveUpgrade() , พิมพ์สิ่งต่อไปนี้เพื่อรับสถิติผู้เล่นเพื่อให้คุณสามารถเข้าถึงตัวแปรทองและพื้นที่ของพวกเขาได้
local function giveUpgrade(player)print("Someone clicked the button")-- รับลีดเดอร์บอร์ดของผู้เล่นเพื่อรับ IntValues อื่นๆlocal playerStats = player:FindFirstChild("leaderstats")if playerStats then-- รับเงินและพื้นที่ของผู้เล่นเพื่อทำการเปลี่ยนแปลงlocal playerGold = playerStats:FindFirstChild("Gold")local playerSpaces = playerStats:FindFirstChild("Spaces")endendหลังจากเขียนตัวแปรสำหรับช่องว่างแล้ว สร้างข้อความ if เพื่อ if ค่าของ playerGold มีมากกว่าหรือเท่ากับค่าใช้จ่ายในการอัพเกรด
local function giveUpgrade(player)local playerStats = player:FindFirstChild("leaderstats")if playerStats thenlocal playerGold = playerStats:FindFirstChild("Gold")local playerSpaces = playerStats:FindFirstChild("Spaces")-- ตรวจสอบว่าผู้เล่นมีเงินเพียงพอที่จะจ่ายค่าอัพเกรดหรือไม่if playerGold and playerSpaces and playerGold.Value >= upgradeCost thenendendendในข้อความ if, ลบค่าใช้จ่ายในการอัพเกรดออกจากทองของผู้เล่น
if playerGold and playerSpaces and playerGold.Value >= upgradeCost then-- หักค่าใช้จ่ายของไอเทมออกจากเงินของผู้เล่นplayerGold.Value -= upgradeCostendในบรรทัดต่อไปให้เพิ่มจํานวนพื้นที่ปัจจุบันของผู้เล่นพร้อมกับพื้นที่ใหม่ที่ได้รับต่อการอัปเกรด
if playerGold and playerSpaces and playerGold.Value >= upgradeCost thenplayerGold.Value -= upgradeCostplayerSpaces.Value += newSpacesendเล่นโครงการของคุณและตรวจสอบลีดเดอร์บอร์ดเพื่อตรวจสอบว่าการอัพเกรดพื้นที่ทำงานได้หรือไม่
เคล็ดลับการแก้ปัญหา
ในจุดนี้การอัพเกรดไม่ทํางานตามที่ตั้งใจไว้ ลองหนึ่งในสิ่งต่อไปนี้
- ตรวจสอบให้แน่ใจว่ามีการอ้างอิงใน ของ ของ ทั้งสองด้าน, เช่น
- ตรวจสอบว่าแต่ละสตริงใน FindFirstChild เป็นเหมือนกับชื่อของ IntValue ในสคริปต์ PlayerSetup อย่างแน่นอนตัวอย่างเช่น หากรหัสของคุณใช้รูบี้เป็นเงิน คุณควรมี FindFirstChild("Rubies")
- ตรวจให้แน่ใจว่า giveUpgrade() อยู่เหนือ clickDetector.MouseClick
สคริปต์ BuyScript สมบูรณ์
สามารถอ้างอิงเวอร์ชันสิ้นสุดของสคริปต์ได้ด้านล่าง
-- ให้ผู้เล่นคลิกปุ่มเพื่อซื้ออัพเกรดที่เพิ่มพื้นที่สูงสุด
local buyButton = script.Parent
local clickDetector = buyButton.ClickDetector
-- ตัวแปรสำหรับการอัพเกรด
local newSpaces = 10
local upgradeCost = 100
local function giveUpgrade(player)
print("Someone clicked the button")
-- รับลีดเดอร์บอร์ดของผู้เล่นเพื่อรับ IntValues อื่นๆ
local playerStats = player:FindFirstChild("leaderstats")
if playerStats then
-- รับเงินและพื้นที่ของผู้เล่นเพื่อทำการเปลี่ยนแปลง
local playerGold = playerStats:FindFirstChild("Gold")
local playerSpaces = playerStats:FindFirstChild("Spaces")
-- ตรวจสอบว่าผู้เล่นมีเงินเพียงพอที่จะจ่ายค่าอัพเกรดหรือไม่
if playerGold and playerSpaces and playerGold.Value >= upgradeCost then
print("Player can buy item")
-- หักค่าใช้จ่ายของไอเทมออกจากเงินของผู้เล่น
playerGold.Value -= upgradeCost
playerSpaces.Value += newSpaces
end
end
end
clickDetector.MouseClick:Connect(giveUpgrade)