4

ゲーム用のコードを書いているときに問題が発生しました。次のようなステートメントでは変数を使用できないようです。

local Username = "Cranavvo"
game.Players.Username:BreakJoints() -- Kills the player

そして、出力は「「ユーザー名」のようなユーザーはいません」と言っています"Cranavvo"

4

4 に答える 4

10

テーブル上の Lua PiLから

レコードを表すには、フィールド名をインデックスとして使用します。a.nameLua は、 のシンタックス シュガーとして 提供することで、この表現をサポートし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
于 2013-03-31T15:38:28.843 に答える
2

これをrobloxで行う正しい方法は次のとおりです。

local Username = "Cranavvo"
local p = game.Players:FindFirstChild(Username)
if(p ~= nil) then
    if(p.Character ~= nil) then
        p.Character:BreakJoints()
    end
end
于 2013-03-31T18:48:11.030 に答える
-1

Lua では、変数が非常に混乱することがあります。

たとえば、グローバル変数とローカル変数があります。

ローカル変数は、操作の終了後に忘れたり消去したりできる変数です。local x = 2

グローバル変数は、忘れられずにゲーム/アプリケーション内にとどまる変数です。これは、ハイスコアやその他の優れたものに適しています。( 「ローカル」ステートメントx = 2がないことに注意してください)

于 2014-12-20T08:49:51.777 に答える