我在为游戏编写一些代码时遇到了一个问题。看来我不能在如下语句中使用变量;
local Username = "Cranavvo"
game.Players.Username:BreakJoints() -- Kills the player
输出告诉我“没有像'用户名'这样的用户”应该是"Cranavvo"
。
要表示记录,您可以使用字段名称作为索引。Lua 通过
a.name
为a["name"]
.初学者的一个常见错误是
a.x
与a[x]
. 第一种形式表示a["x"]
,即由字符串 索引的表"x"
。
因此,当您尝试:
game.Players.Username:BreakJoints()
Lua 将其解释为:
game["Players"]["Username"]:BreakJoints()
这当然是错的。如果您想使用不同的名称作为表的索引,请像这样使用它们:
local foo = "Cranavvo"
game.Players[foo]:BreakJoints()
但要提到的是,Player类没有BreakJoints方法,您必须借助.Character属性获取角色模型,如下所示:
local foo = "Cranavvo"
game.Players[foo].Character:BreakJoints()
还需要提到的是,如果具有该名称的玩家不存在,则代码将中断,并且该字符可以为空,在这种情况下它也会中断。因此,您需要添加一些错误处理。像这样:
local foo = "Cranavvo"
local Player = game.Players:findFirstChild(foo)
if Player ~= nil and Player.Character ~= nil then
Player.Character:BreakJoints()
end
在 roblox 中执行此操作的正确方法是:
local Username = "Cranavvo"
local p = game.Players:FindFirstChild(Username)
if(p ~= nil) then
if(p.Character ~= nil) then
p.Character:BreakJoints()
end
end
在执行代码时仔细检查用户是否真的存在。
它也应该是:
game.Players.Username:BreakJoints()
编辑:
我误读了您想要做的事情:在
...Players.Username
lua 将Username解释为命名索引,并且不使用预先声明的 Username 变量。
如果要访问具有动态名称的数组变量,可以这样做:
game.Players[Username]:BreakJoints()
另外在 roblox 中,您可以使用以下内容:
game.Players:GetPlayerByID(userId):BreakJoints()
变量有时在 Lua 中非常令人困惑。
例如,有全局变量和局部变量。
局部变量是操作结束后可以忘记/擦除的变量:local x = 2
全局变量是留在游戏/应用程序中不会被遗忘的变量,这对高分和其他整洁的东西很好。x = 2
(注意没有“本地”声明)