1

x & y 座標、テクスチャ情報、および別のテーブルなどの情報を格納するテーブルを使用して、グリッドを作成しようとしています。グリッドの作成に使用されるコードの一部を次に示します。

for i = i, n do
    local random = math.floor(rainbow.random(1, 13))
    self.grid[i] = {
        sprite = Labyrinth:make_cell_texture(spritebatch, position_x, position_y, i, random),
        y = position_y,
        x = position_x,
        nav = Cell:get_nav(random)
    }
    position_x = position_x + 0.09375
end

それは

nav = Cell:get_nav(random)

新しいテーブルを作成している部分:

if random == 1 then
    self.nav = {
        north = true,
        east = false,
        south = false,
        west = false,
    }

問題は、上記の変数にアクセスして、それらが真であるか偽であるかを確認することです。に戻りself.nav、を取得するgrid[i].navことができます。print(self.nav.east)true

nilしかし、後でテーブルにアクセスすると、そこにテーブルがあることを印刷することができますが、常に が返されます。

私はこのループで試しました:

for i = 1, 10 do
    if self.grid[i].nav.north and self.grid[i + 10].nav.south then
        print("Two sides are touching!")
    end
end

も付いてself.grid[i][4].northいますが、役に立ちません。

設定方法が悪いのでしょうか?にも名前を変更navしてみました[4]

私は間違った木を吠えていますか?テーブルはこれほど深くなるように設計されていませんでしたか?

4

2 に答える 2

2

グリッドにデータを入力するループでは、次のコードを使用します。

nav = Cell:get_nav(random)

今、あなたの質問から、次のような関数を呼び出すようです:

function Cell:get_nav(random)
   self.nav = {
    north = true,
    east = false,
    south = false,
    west = false,
}
--more code here
end 

もしそうなら、何が起こっているかというと、Cell を関数内の識別子 self に渡しているということです。

Cell.nav = {
    north = true,
    east = false,
    south = false,
    west = false,
}

これは、Dog:jump(height) が、Dog が self に渡される Dog.jump(self,height) と同じであるためです。

ただし、グリッド self.grid[i] の各インデックスには、キー「nav」を含むテーブルと方向を含むテーブルが含まれていると思います。その場合は、Cell:get_nav 関数を次のように値を返すように変更します。

if random == 1 then
return {
    north = true,
    east = false,
    south = false,
    west = false,
}

これにより、方向のテーブルが self.grid[i].nav に割り当てられます。以前と同様に、self.grid[i].nav に nil 値が割り当てられていました。

function edit_my_param(f)
f = 3
end 

nav = edit_my_param(4)
print(nav)

関数は値を返さないため、値 nav を nil に設定します。

よろしく、ヘンリー

于 2012-08-04T12:29:19.670 に答える
0

Cell[i]それを呼び出す場合もあればgrid[i]、同じテーブルを参照していると確信していますか?

何をCell:get_nav返しますか?; それが返す値が入れself.Cell[i].navられるので、冗長である可能性があり、またセットするself.navのは確かに混乱しますCell:get_nav

于 2012-08-01T19:40:44.827 に答える