2

コードはとてもシンプルです。単純なテーブルと多次元テーブルの 2 つのテーブルを宣言します。

Player = {X_Pos = 1, Y_Pos = 1, Current_Sprite_Num = 100}


    for j=1, Max_col_length do -- value ofMax_col_length doesn't matter here; positive integer anyway

        MapLayer_B[j] = {}

        for i=1, Max_row_length do --same here
            MapLayer_B[j][i] = 1
        end
    end

次に、この操作を実行しようとします:

MapLayer_B[Player[X_Pos]][Player[Y_Pos]] = Player[Current_Sprite_Num]

のth rowtablePlayer[X_Pos]の th 要素を置き換える必要があります。代わりに、LÖVE コンパイラで次のエラーが発生しました。Player[Y_Pos]MapLayer_B

  • エラー: フィールド '?' にインデックスを付けようとしました (ゼロ値)

MapLayer_BPlayerテーブルのすべての要素が宣言されており、nilに保持されていないため、なぜそれが起こるのか、私にはよくわかりません。

何か案は?

4

1 に答える 1

2

Player.X_Posなどの代わりに使用する必要がありますPlayer[X_Pos]

角括弧表記は "X_Pos" を変数として解釈し、代わりに taht キーにアクセスしようとします (エラーの理由は、未定義の変数がデフォルトで null になるためです)。

t = {a = 17}

print( t.a ) --dot notation is simpler

print( t["a"] ) --bracket notation expects a string

key = "a" --that string can be from a variable
print( t[key] )
于 2013-08-14T21:38:17.553 に答える