购买升级

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

这带我们到游戏循环的最后阶段——购买升级。通过让玩家购买增加物品袋大小的升级,他们可以在每次旅行中收集更多物品并赚取更多金币。

创建商购物

每个商店都会有一个按钮,玩家可以单击以购买更大的物品袋。商店本身将包含一个 SurfaceGUI,这是一个允许在零件上写入文本的物品。

创建标志

  1. 在工工作间中,创建一个名为 Shop 的新模型。

  2. 在商店中,创建一个名为 BuyButton 的新块部件。

  3. 在购买按钮中,通过单击 + 并滚动到 GUI 添加新的界面图形用户界面。

  4. 在表面图形用户界面中,添加一个名为 BuyText 的新文本标签。小标签会出现在零件的某个地方。

  5. 根据零件是如何制造的,标签可能在另一个地方。如果你没有看到你想要的侧面文本,请进入 SurfaceGUI 并找到面属性。直到你看到文本标签为止,修改该属性。

更改签名文本

目前,文本标签实在太小,玩家很难看到。需要进行缩放。

  1. 在购买文本属性中,单击 尺寸 旁边的箭头。将 偏移 更改为 X (左右) 和 Y (上下) 为 0。

  2. 将 X 和 Y 的 缩放 更改为 0.5 以制作一个正方形。

  3. 在 TextLabel 属性中向上滚动并单击 锚点 左侧的箭头。输入 0.5 为 X 和 Y。这将部分标签从视野中移出,但你会在下一步正确地位置它。

  4. 在属性中向下滚动并打开 位置 。将 X 和 Y 的缩放设为 0.5 以便箱子中心对齐。

  5. 在购买文本属性中,向下滚动并将 文本 更改为描述性内容。例实例:"Buy Larger Bag: 100 gold"

  6. 检查 文本缩放 以成为 。这将自动缩放您的文本,使其适合方块子。

添加点击检测器

玩家将通过单击商店购买物品,而不是只触碰它。脚本将使用点击检测器来告诉如果玩家点击了商店标志。 点击探测器 是允许用户与环境中的某物互动的对象,例如打开门。

  1. 在购买按钮中,添加一个点击检测器。

  2. 在购买按钮中,添加一个名为 BuyScript 的新脚本并给予它描述性评论。

  3. 在 BuyScript 中,创建变量以存储按钮部分和单击探测器。


    -- 让玩家单击按钮购买增加空间的升级
    local buyButton = script.Parent
    local clickDetector = buyButton.ClickDetector
  4. 创建一个名为 giveUpgrade() 的新函数,获得一个名为 player 的参数。函数会在玩家单击按钮时升级他们的空间。


    local buyButton = script.Parent
    local clickDetector = buyButton.ClickDetector
    local function giveUpgrade(player)
    end
  5. 在函数之后,键入连接点击探测器的MouseClick事件到giveUpgrade()函数。


    local function giveUpgrade(player)
    end
    clickDetector.MouseClick:Connect(giveUpgrade)
  6. giveUpgrade() 中添加打印声明来测试函数。


    local function giveUpgrade(player)
    print("Someone clicked the button.")
    end
  7. 播放 你的项目。单击按钮,然后检查你是否看到输出窗口中的文本。

排除问题的提示

问题: 您无法单击按钮或鼠标指针不会出现在按钮上。

  • 确保 ClickDetector 对象是您尝试单击的零件的子对象。
  • 检查您的角色是否足够接近按钮。或确保工具未装备。

购买升级

有了工作按钮,是时候将代码添加到 giveUpgrade 来移除玩家的黄金,以换取升级的背包。

添加升级变量

每次升级都会有两个变量:升级的成本和它拥有的空间数量。

  1. 在 BuyScript 中,在 local clickDetector 下,创建两个变量:

    • newSpace : 升级购买时添加多少空间。
    • upgradeCost : 单次升级的成本

    -- 升级的变量
    local newSpaces = 10
    local upgradeCost = 100

提供升级

在出售玩家升级之前,您需要检查他们是否有足够的资金。如果他们这样做,您将增加他们的最大空间数量。

  1. 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")
    end
    end
  2. 在空格变量写完之后,创建一个 if 声明,如果 playerGold 的值大于或等于升级成本,就执行它。


    local function giveUpgrade(player)
    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
    end
    end
    end
  3. 在 if 声明中,从玩家的金币中减去升级的费用。


    if playerGold and playerSpaces and playerGold.Value >= upgradeCost then
    -- 从玩家的钱中扣除物品的成本
    playerGold.Value -= upgradeCost
    end
  4. 在下一行中,添加玩家当前空间的数量以及每次升级所授予的新空间。


    if playerGold and playerSpaces and playerGold.Value >= upgradeCost then
    playerGold.Value -= upgradeCost
    playerSpaces.Value += newSpaces
    end
  5. 播放您的项目并检查排行榜以检查空间升级是否成功。

排除问题的提示

在这一点上,升级不像预期的那样工作,尝试以下方法之一。

  • 确保在 ()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)