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.navgrid[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.jump(self,height) 相同,其中 Dog 被传递给 self。

但是,我相信您打算拥有的是网格 self.grid[i] 中的每个索引都包含一个表,该表本身包含一个键“导航”和一个包含方向的表。如果是这样,请更改 Cell:get_nav 函数以返回值,如下所示:

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

这会将方向表分配给 self.grid[i].nav,与之前一样,它将 nil 值分配给 self.grid[i].nav,因为:

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 回答