我试图使用表来创建一个网格,该表存储诸如x和amp;之类的信息。 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]
。
答案 0 :(得分: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传递给函数内部的标识符,所以你实际上是在说
Cell.nav = {
north = true,
east = false,
south = false,
west = false,
}
这是因为Dog:jump(height)与Dog.jump(self,height)相同,其中Dog被传递给self。
但是我相信你打算拥有的是网格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,因为该函数不返回值。
问候,亨利
答案 1 :(得分:0)
在某些情况下,您将其称为Cell[i]
,在其他情况下称为grid[i]
- 您确定要引用同一个表吗?
Cell:get_nav
返回什么?它返回的值会被放入self.Cell[i].nav
,因此可能是多余的,并且在self.nav
Cell:get_nav
肯定会让人感到困惑