ゲーム用のコードを書いているときに問題が発生しました。次のようなステートメントでは変数を使用できないようです。
local Username = "Cranavvo"
game.Players.Username:BreakJoints() -- Kills the player
そして、出力は「「ユーザー名」のようなユーザーはいません」と言っています"Cranavvo"
。
レコードを表すには、フィールド名をインデックスとして使用します。
a.name
Lua は、 のシンタックス シュガーとして 提供することで、この表現をサポートし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()
また、その名前のプレーヤーが存在しない場合、コードが壊れること、および文字が null になる可能性があることも言及する必要があります。その場合も壊れます。したがって、エラー処理を追加する必要があります。このような:
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
Lua では、変数が非常に混乱することがあります。
たとえば、グローバル変数とローカル変数があります。
ローカル変数は、操作の終了後に忘れたり消去したりできる変数です。local x = 2
グローバル変数は、忘れられずにゲーム/アプリケーション内にとどまる変数です。これは、ハイスコアやその他の優れたものに適しています。( 「ローカル」ステートメントx = 2
がないことに注意してください)