这带我们到游戏循环的最后阶段——购买升级。通过让玩家购买增加物品袋大小的升级,他们可以在每次旅行中收集更多物品并赚取更多金币。
创建商购物
每个商店都会有一个按钮,玩家可以单击以购买更大的物品袋。商店本身将包含一个 SurfaceGUI,这是一个允许在零件上写入文本的物品。
创建标志
在工工作间中,创建一个名为 Shop 的新模型。
在商店中,创建一个名为 BuyButton 的新块部件。
在购买按钮中,通过单击 + 并滚动到 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播放 你的项目。单击按钮,然后检查你是否看到输出窗口中的文本。
排除问题的提示
问题: 您无法单击按钮或鼠标指针不会出现在按钮上。
- 确保 ClickDetector 对象是您尝试单击的零件的子对象。
- 检查您的角色是否足够接近按钮。或确保工具未装备。
购买升级
有了工作按钮,是时候将代码添加到 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() 中没有任何东西有引用在 两侧 上,比如 "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)