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

Roblox开发求助:GUI检测货币变化时意外消失

Roblox货币变化GUI显示问题修复

问题根源

你的代码存在两个核心问题导致GUI异常:

  1. 无限触发事件循环:在Changed回调里手动执行moneyValue.Value = newMoney完全多余——Changed事件本身就是数值更新后才触发的,这行代码会再次修改数值,导致事件无限循环触发,最终引发GUI异常。
  2. 变化值计算逻辑错误:newMoney - moneyValue.Value的写法完全错误,触发事件时moneyValue.Value已经是新值,所以计算结果永远为0,直接进入else分支清空文本,看起来就像GUI消失了。

修正后的代码

local player = game.Players.LocalPlayer
local leaderstats = player:WaitForChild("leaderstats")
local moneyValue = leaderstats:WaitForChild("Money")

local guiElement = script.Parent

-- 用WaitForChild替代手动循环查找,更简洁可靠
local display = guiElement:WaitForChild("TextBox")

-- 记录初始货币值,用于计算后续变化量
local previousMoney = moneyValue.Value

moneyValue.Changed:Connect(function(newMoney)
    local change = newMoney - previousMoney
    
    if change > 0 then
        display.Text = "+" .. tostring(change)
        display.TextColor3 = Color3.fromRGB(0, 255, 0) -- 绿色表示货币增加
    elseif change < 0 then
        display.Text = tostring(change)
        display.TextColor3 = Color3.fromRGB(255, 0, 0) -- 红色表示货币减少
    else
        display.Text = ""
        display.TextColor3 = Color3.fromRGB(255, 255, 255) -- 无变化时清空文本
    end
    
    -- 更新记录的货币值,为下一次变化计算做准备
    previousMoney = newMoney
end)

关键修改说明

  • 替换手动循环查找为WaitForChild,Roblox内置方法更高效且能确保找到目标对象。
  • 新增previousMoney变量记录上一次的货币数值,保证每次变化都能正确计算差值。
  • 删除了多余的moneyValue.Value = newMoney,彻底避免无限触发事件循环。
  • 如果需要让提示文本显示一段时间后自动消失,可以在change > 0或change < 0的分支里添加task.wait(2)后再设置display.Text = "",优化用户体验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 11:27:25