You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何修复Lua中‘尝试用Text索引数字’错误?属性标签更新问题

修复Lua代码中的“尝试用Text索引数字”错误

错误原因分析

  1. 变量命名冲突:你先定义了UI元素AvaiblePoints(TextLabel对象),之后又用同名变量存储玩家的属性数值(数字类型)。循环里尝试给AvaiblePoints.Text赋值时,实际操作的是数字变量,触发“用Text索引数字”的错误。
  2. 未实时同步属性值:初始化时仅获取一次属性值,循环里一直用旧值更新标签,无法同步玩家属性的实时变化。
  3. 点击事件逻辑缺失:点击按钮时没有减少可用点数,也未更新本地变量,属性值无法正确累加。

修复后的完整代码

-- 修正拼写:Strenght → Strength,Avaible → Available(规范命名)
local StrengthButton = script.Parent.Frame.Strength
local DFButton = script.Parent.Frame.DevilFruit
local SwordButton = script.Parent.Frame.Sword

local StrengthLabel = script.Parent.Frame.StrengthLabel
local DFLabel = script.Parent.Frame.DFLabel
local SwordLabel = script.Parent.Frame.SwordLabel
-- UI元素与属性值变量名区分开
local AvailablePointsUI = script.Parent.Frame.AttributePointsIndicator
local Frame = script.Parent.Frame

local StatsMenu = script.Parent.StatsMenu

local Player = game.Players.LocalPlayer

-- 初始化属性值变量
local availablePointsValue = Player:GetAttribute("AvailablePoints")
local strengthValue = Player:GetAttribute("Strength")
local dfValue = Player:GetAttribute("DevilFruit")
local swordValue = Player:GetAttribute("Sword")

-- 实时更新标签循环
while true do
    task.wait(2.5)
    -- 每次循环重新获取最新属性值,保证同步
    availablePointsValue = Player:GetAttribute("AvailablePoints")
    strengthValue = Player:GetAttribute("Strength")
    dfValue = Player:GetAttribute("DevilFruit")
    swordValue = Player:GetAttribute("Sword")
    
    -- 给UI标签赋值,使用正确的属性值变量
    AvailablePointsUI.Text = "Available Points - " .. availablePointsValue
    StrengthLabel.Text = "Strength - " .. strengthValue
    DFLabel.Text = "Devil Fruit - " .. dfValue
    SwordLabel.Text = "Sword - " .. swordValue
end

-- 按钮点击事件修复:完善属性分配逻辑
StrengthButton.MouseButton1Click:Connect(function()
    availablePointsValue = Player:GetAttribute("AvailablePoints")
    if availablePointsValue >= 1 then
        Player:SetAttribute("Strength", strengthValue + 1)
        Player:SetAttribute("AvailablePoints", availablePointsValue - 1)
    end
end)

DFButton.MouseButton1Click:Connect(function()
    availablePointsValue = Player:GetAttribute("AvailablePoints")
    if availablePointsValue >= 1 then
        Player:SetAttribute("DevilFruit", dfValue + 1)
        Player:SetAttribute("AvailablePoints", availablePointsValue - 1)
    end
end)

SwordButton.MouseButton1Click:Connect(function()
    availablePointsValue = Player:GetAttribute("AvailablePoints")
    if availablePointsValue >= 1 then
        Player:SetAttribute("Sword", swordValue + 1)
        Player:SetAttribute("AvailablePoints", availablePointsValue - 1)
    end
end)

关键修复点

  • 变量名区分:将UI元素与属性值的变量彻底分离(如AvailablePointsUI对应标签,availablePointsValue对应数值),避免命名冲突。
  • 实时获取属性:循环内每次调用Player:GetAttribute()拉取最新值,确保标签显示玩家当前真实属性。
  • 完善分配逻辑:点击按钮时先校验最新可用点数,确认足够后,同时增加目标属性、减少可用点数,符合属性分配的核心逻辑。

内容的提问来源于stack exchange,提问作者takezo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.23 15:57:19