นี่ทำให้เราไปถึงขั้นสุดท้ายของวงจรเกม - การซื้ออัพเกรด โดยการให้ผู้เล่นซื้ออัพเกรดที่เพิ่มขนาดกระเป๋าของไอเท็มของพวกเขา, พวกเขาสามารถเก็บรวบรวมไอเท็มมากขึ้นต่อการเดินทางและรับเหรียญมากขึ
การสร้างร้านค้า
แต่ละร้านค้าจะมีปุ่มที่ผู้เล่นคลิกเพื่อซื้อกระเป๋ารายการขนาดใหญ่ ร้านค้าเองจะเป็นส่วนหนึ่งที่มี SurfaceGUI ซึ่งเป็นรายการที่สามารถเขียนข้อความบนชิ้นส่วนได้
การสร้างสัญลักษณ์
ใน Workspace สร้างโมเดลใหม่ที่มีชื่อว่า Shop
ในร้านค้า สร้างบล็อกใหม่ที่มีชื่อว่า BuyButton
ใน BuyButton เพิ่ม GUI พื้นผิวใหม่โดยการคลิก + และเลื่อนเมาส์ไปยัง GUI
ใน Surface GUI เพิ่ม TextLabel ใหม่ที่มีชื่อว่า BuyText ป้ายเล็กจะปรากฏขึ้นที่ไหนสักแห่งในตัวอักษร
ขึ้นอยู่กับวิธีการที่ชิ้นส่วนถูกสร้าง ฉลากอาจอยู่ที่อื่น หากคุณไม่เห็นข้อความบนด้านข้างที่คุณต้องการ ไปที่ SurfaceGU และค้นหา โปรไฟล์หน้า
เปลี่ยนข้อความบนป้าย
ตอนนี้ TextLabel เล็กมากและยากสำหรับผู้เล่นที่จะเห็น มันต้องการเพิ่มขนาด
ในสรรพสิ้นข้อความ, คลิกที่ลูกศรที่อยู่ข้างๆ ขนาด เปลี่ยน เอียนเซ็ต สำหรับ X (ซ้ายและขวา) และ Y (ขึ้นและลง) เป็น 0
เปลี่ยน ขนาดเครื่องชั่ง ของ X และ Y เป็น 0.5 เพื่อสร้างรูปสี่เหลี่ยม
เลื่อนขึ้นในสรรพสิ้นใน TextLabel และคลิกลูกศรซ้ายของ AnchorPoint ใส่ 0.5 สำหรับ X และ Y ป้อนตัวอักษรใน 0.5 สำหรับ X และ Y คุณจะย้ายส่วนของแท็งกี้ออกจากมุมมอง แต่คุณจะตำแหน่งตัวอย่างได้อย่างถูก
เลื่อนลงในโปรไฟล์และเปิด ตําแหน่ง เปลี่ยนขนาดของ X และ Y ให้เป็น 0.5 เพื่อให้กล่องอยู่ในตำแหน่งกึ่งกลาง
ในสรรพสินค้าText โปรไฟล์เลื่อนลงและเปลี่ยน ข้อความข้างล่าง เป็นสิ่งที่อธิบายได้ อินสแตนซ์: "Buy Larger Bag: 100 gold" .
ตรวจสอบ TextScaled เพื่อให้ บน อยู่ นี่จะปรับแต่งขนาดข้อความของคุณให้เหมาะกับกล่อง
การเพิ่มตัวตรวจจับการคลิก
ผู้เล่นจะซื้อไอเท็มโดยการคลิกที่ร้านค้าแทนที่จะแค่แตะมัน สคริปต์จะใช้เครื่องตรวจจับการคลิกเพื่อบอกว่าผู้เล่นได้คลิกที่ป้ายร้านค้าหรือไม่ เครื่องตรวจจับการคลิกเพื่อ
ในปุ่มซื้อ เพิ่ม ClickDetector
ใน BuyButton เพิ่มสคริปต์ใหม่ที่มีชื่อว่า 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 ถ้าค่าของ 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() ที่มีการอ้างอิงในทั้งสองด้านเช่น leaderstats * ตรวจสอบว่าแต่ละสตริงใน 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)