這帶我們到遊戲循環的最後階段--購買升級。讓玩家購買增加物品袋大小的升級,可以讓他們每趟收集更多物品,並賺取更多黃金。
創建商購物
每間商店都會有一個按鈕,玩家可以點擊以購買更大的物品袋。商店本身會是一個包含 SurfaceGUI 的部分,一個允許在零件上寫文字的項目。
創建標誌
在工作區中,創建一個名為商店的新模型。
在商店中,創建一個名為購買按鈕的新方塊部分。
在購買按鈕中,通過點擊 + 並向下滾動到 GUI 添加新的界面圖形用戶介面。
在表面 GUI 中,添加一個新的文字標籤名為 BuyText 的標籤。小標籤會出現在零件的某處。
根據零件是如何製作的,標籤可能會在另一個地方。如果你沒有看到你想要的側面文字,請進入SurfaceGUI並找到面屬性。直到您看到文字標籤為止,修改該屬性。
變更標誌文字
目前,文字標籤很小,玩家很難看到。需要縮放。
在「購買文字」屬性中,點擊 尺寸 旁邊的箭頭。將 偏移 變更為 X (左右) 和 Y (上下) 為 0。
將 X 和 Y 的 比例 變更為 0.5 以製作正方形。
在 TextLabel 屬性中滾動並點擊 錨點 左側的箭頭。輸入 0.5 對於 X 和 Y。這會將標籤的部分從視覺中移除,但你下一步會正確地位置它。
在屬性中向下滾動並開啟 位置 。將 X 和 Y 的比例變更為 0.5,以便盒子中央對齊。
在「購買文字」屬性中,向下捲動並將 文字 變更為描述性的內容。例個體、實例:"Buy Larger Bag: 100 gold"。
檢查 文字縮放 為 上 。這會自動將文字縮放到方塊子中。
添加點擊偵測器
玩家會通過點擊商店來購買物品,而不是只是觸碰它。腳本將使用點擊偵測器來告知玩家是否點擊了商店標誌。 點擊偵測器 是允許用戶與環境中的某物互動的對象,例如開啟門。
在購買按鈕中,添加一個點擊探測器。
在購買按鈕中,添加一個名為 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播放 您的項目。單擊按鈕並檢查您在輸出窗口中看到文字。
排除故障提示
問題:: 您無法單擊按鈕或滑鼠指針不會出現在按鈕上。
- 請確保點擊偵測對象是您嘗試點擊的零件的子對象。
- 檢查您的角色是否足夠接近按鈕。或確保工具未裝備。
购买升级
使用工作按鈕,是時候將代碼添加到給予升級以移除玩家的黃金,以換取升級的背包了。
添加升級變數
每次升級將有兩個變量:升級費用和它擁有的空間數量。
在 local clickDetector 下,創建兩個變量:
- newSpace : 升級購買時新增的空間數量。
- upgradeCost : 單次升級的費用
-- 升級的變量local newSpaces = 10local upgradeCost = 100
提供升級
在出售玩家升級之前,您需要檢查他們是否有足夠的資金。如果他們這麼做,您將增加他們的最大空間數量。
在 giveUpgrade() 中,輸入以下內容以獲得玩家的統計資料,因此您可以存取他們的黃金和空間變量。
local function giveUpgrade(player)print("Someone clicked the button")-- 取得玩家的排行榜以獲得其他的 IntValueslocal 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 名稱是否相同。例如,如果您的代碼使用紅寶石作為資金,您應該有 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)