這會帶我們到遊戲循環的最後一個階段 - 購買升級。讓玩家購買升級,增加其物品背包的大小,可以在每次旅程中收集更多物品並獲得更多金幣。
創建商店
每個商店都會有一個玩家點擊來購買更大的物品背包。商店本身會是一個包含 SurfaceGUI 的零件,這是一種允許在零件上寫入文字的物品。
創建標誌
在工作區創建名為 Shop 的新模型。
在商店創建名為 BuyButton 的新方塊。
在 BuyButton 中,通過單擊 + 並捲動捲動到 GUI 添加新的表面使用者介面。
在表面 GUI 中,添加一個名為 BuyText 的新文字標籤。小標籤會在零件上出現。
依據零件是否為空,標籤可以放置在任何位置。如果您沒有看到頁面上您想要的文字,請前往 SurfaceGUI 並尋找面孔屬性。直到您看到標籤文字為止,您將改變此屬性。
變更標誌文字
現在,文字標籤非常小,玩家很難看到。需要擴大。
在 BuyText 屬性中,單擊箭頭靠近 尺寸 。變更 X (左邊和右邊) 和 Y (上邊和下邊) 的 Offset 為 0。
將 X 和 Y 的 縮放 變更為 0.5 以製作平方。
在 TextLabel 屬性中捲動並單擊 AnchorPoint 的左箭頭。輸入 0.5 以 X 和 Y 的速度。這會將標籤的一部分從視野中移動,但您將在下一步正確位置。
在屬性欄中捲動並打開 位置 。將 X 和 Y 的尺寸變更為 0.5 以便中心在中間。
在 BuyText 屬性中,向下捲動並變更 文字 為說明。例個體、實例: "Buy Larger Bag: 100 gold" 。
檢查 文字大小 以便 在 上。這會自動調整您的文字,使其適合方塊子。
新增點擊偵測器
玩家會通過點擊商店而不是只是點擊它來購買物品。 點擊偵測器 是對用戶進行交互的對象,它會使用點擊偵測器來告訴是否有玩家點擊商店標誌。 點擊偵測器是對環境中的對象,例如開門。
在 BuyButton 中,添加 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播放您的項目。點擊按鈕並確認您在輸出窗口中看到文字。
排障提示
問題: 您無法點擊按鈕或鼠標指針不會顯示在按鈕上。
- 確認點擊偵測器對象是您嘗試點擊的零件的子孫。
- 確認您的角色足夠接近按鈕。或者,確認工具未裝備。
購買升級
有了工作按鈕,是時候來將代碼添加到 giveUpgrade,以換取玩家的黃金,以換取升級的背包。
增加升級變數
每次升級都會有兩個變數:升級的費用和它有多少空間。
在 BuyScript 中,在 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() 的 стороны 上都有引言,像 1>#leaderstats1> 。
- 檢查FindFirstChild中的每個字串與PlayerSetup指令碼中的 FindFirstChild("Rubies") 相同。 例如,如果您的代碼使用 Ruby 作為錢幣,您應該有 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)