【问题标题】:attempt to concatenate nil with string Roblox尝试将 nil 与字符串 Roblox 连接
【发布时间】:2021-04-26 12:33:46
【问题描述】:

我很困惑。我正在努力做到这一点,如果你用 Roblox 的“ProximityPrompt”按住 E,你会在屏幕上看到一个带有一些文本的 GUI。一切正常,除了文本不起作用。我也没有在客户端脚本上写一个字符串。在传递过来的服务器脚本上有一个变量。但我一直在输出中看到这个错误。

Players.ford200000.PlayerGui.BuyGui.Frame.TextInput.Text:2:尝试将 nil 与字符串连接 - 客户端 -

这是我在脚本中所做的事情

local sp = script.Parent
sp.ProximityPrompt.Triggered:Connect(function(player)
    local name = sp.Name
    local ss = game.ServerStorage
    local item = ss.Hats:FindFirstChild(name)
    local price = item.Price
    game.ReplicatedStorage.ShopClickEvent:FireClient(player)
    game.ReplicatedStorage.ShopInfoEvent:FireClient(player)
end)

并且在监听 ShopInfoEvent 的本地脚本中

game.ReplicatedStorage.ShopInfoEvent.OnClientEvent:Connect(function(player, price, item)
    script.Parent.Text = "Would you like to buy this ".. item.Name .." for ".. price.Value .."?"
end) 

请帮忙,将不胜感激。

【问题讨论】:

  • 你能发布你的代码吗?
  • local sp = script.Parent sp.ProximityPrompt.Triggered:Connect(function(player) local name = sp.Name local ss = game.ServerStorage local item = ss.Hats:FindFirstChild(name) local price = item.Price game.ReplicatedStorage.ShopClickEvent:FireClient(player) game.ReplicatedStorage.ShopInfoEvent:FireClient(player) end) 服务器脚本
  • game.ReplicatedStorage.ShopInfoEvent.OnClientEvent:Connect(function(player, price, item) script.Parent.Text = "Would you like to buy this ".. item.Name .." for ".. price.Value .."?" end) 客户端脚本
  • @ford200000 请不要在 cmets 中发布代码不好,因为您无法正确格式化它。相反,请编辑您的问题。

标签: lua roblox


【解决方案1】:

您的错误是告诉您您尝试添加到字符串的对象未定义。 这可能是 item.Nameprice.Value 未定义并导致此字符串构造失败。

查看您如何定义itemprice 表明这两个值在LocalScript 的回调中都未定义。当您调用 RemoteEvent's FireClient function 时,第一个参数告诉引擎将事件发送给谁,所有其他参数作为回调的参数传入。目前,您根本没有传递任何参数。

因此,要解决您的问题,您需要从脚本中传入正确的参数:

game.ReplicatedStorage.ShopInfoEvent:FireClient(player, price, item)

并在您的 LocalScript 中正确解析它们:

game.ReplicatedStorage.ShopInfoEvent.OnClientEvent:Connect(function(price, item)
    script.Parent.Text = "Would you like to buy this ".. item.Name .." for ".. tostring(price.Value) .."?"
end) 

【讨论】:

  • 感谢@Kylaaa,我尝试了您所说的,但输出中出现了新错误。 | Players.ford200000.PlayerGui.BuyGui.Frame.TextInput.Text:2:尝试使用“名称”索引 nil - 客户端 |它说“名称”为零。
  • 没关系,我想通了!我只能通过脚本传递一个单词,所以我必须制作变量“价格”pice.value。而且我必须为“名称”创建一个新变量,然后一切正常!非常感谢,我终于可以继续在那个游戏中做其他事情了!
  • 你想看看正在进行的游戏吗?
  • 给我发一个关于 Roblox 的链接
【解决方案2】:

Players.ford200000.PlayerGui.BuyGui.Frame.TextInput.Text:2:尝试 将 nil 与字符串连接 - 客户端 -

告诉你你需要知道的一切。

您正在尝试将 nil 与字符串连接。这意味着您在第 2 行使用带有 nil 操作数的字符串连接运算符 ..

让我们看看第 2 行

script.Parent.Text = "Would you like to buy this ".. item.Name .." for ".. tostring(price.Value) .."?"

"Would you like to buy this "" for ""?" 显然是字符串。这给我们留下了item.Nametostring(price.Value)

如果price.Valueniltostring 将把它变成"nil"。所以这不可能是这个特定错误消息的原因。

剩下的就是item.Name。如果 item 是nil,我们会看到一个索引 nil 值的错误。所以这告诉我们,无论item 是什么,它都不是我们所期望的。包含键“名称”元素的表。

此时您知道您的函数的参数有问题。因此,您(希望再次)参考手册并将其与您使用这些事件函数的方式进行比较。

【讨论】:

  • 哦,对不起小猪。你的消息对我帮助不大。希望你能理解。
  • @ford200000 我刚刚将此添加到 Kylaaa 的勺子喂养解决方案中,这样您就可以真正学到一些东西。实际上,我告诉过您如何自己解决此类问题以及如何理解此错误消息。我对声誉和绿色钩子不感兴趣。所以下次请尝试理解答案,而不是告诉作者它没有帮助。了解错误消息并有效追踪其原因对于任何程序员都至关重要
  • 谢谢你告诉我这个,我还在成长为一名程序员。
  • 感谢您添加这个出色的解释 Piglet。将来我会尝试更好地解释问题和推理步骤,所以我的答案不仅仅是勺子喂养的解决方案。对于如何改进我的答案,您还有其他建议吗?
  • @Kylaaa 只需在操作方法中添加一点为什么。我也喜欢参考手册很多。从手册中获取信息是一项至关重要的技能,因此我尝试向人们展示他们可以通过阅读手册或简单的调试打印找到解决方案
猜你喜欢
  • 2021-07-04
  • 2021-09-30
  • 1970-01-01
  • 2021-04-06
  • 2021-09-23
  • 2020-12-16
  • 2022-11-23
  • 1970-01-01
  • 2021-09-30
相关资源
最近更新 更多