这使我们到达游戏循环的最后一阶段 - 购买升级。通过让玩家购买增加其物品背包大小的升级,他们每次可以收集更多物品,并且获得更多金币。
创建商店
每个商店都会有一个玩家单击以购买更大的物品包的按钮。商店本身将是一个带有 SurfaceGUI 的零件,允许在零件上写入文本。
创建标志
在工工作间中,创建一个名为 Shop 的新模型。
在商店中,创建一个名为 BuyButton 的新块部件。
在 BuyButton 中,通过单击 + 并向 GUI 滚动添加一个新的界面。
在表面 GUI 中,添加一个名为 BuyText 的新 TextLabel。小标签会出现在零件上。
随着零件的制作方法,标签可以放在任何地方。如果您不看到您想要的文本,请进入表面GUI并找到面部属性。直到您看到文本标签为止。
更改签牌文本
现在,TextLabel 真的很小,玩家很难看到。需要缩放。
在 BuyText 属性中,单击箭头旁边的 大小 。 改变 X (左和右) 和 Y (上和下) 的 抵消 为 0。
将 X 和 Y 的 缩放 改为 0.5 使 X 和 Y 形成一个正方形。
在 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播放你的项目。 单击按钮并确保你看到输出窗口中的文本。
排查提示
问题: 您无法单击按钮或鼠标指针不会显示在按钮上。
- 请确保ClickDetector对象是您尝试点击的部件的子对象。
- 检查您的角色是否足够靠近按钮。或确保工具未装备。
购买升级
使用工作按钮,是时候将代码添加到升级,以换取玩家的金币。
添加升级变量
每次升级将有两个变量:升级的成本和它的空间。
在 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() 的 lado 有上下文,像 2>leaderstats2> 。
- 检查FindFirstChild中的每个字符串与PlayerSetup脚本中的Rubies名称相同。例如,如果您的代码使用Rubies作为钱,您应该有 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)