2012-08-01 62 views
1

我想使用一個表格來存儲網格,該表格存儲x座標,紋理信息和其他表格等信息。下面是一些用於創建網格代碼:Lua:訪問多維表/數組中的變量

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]

我吠叫錯了樹嗎?不是設計成這樣深的桌子?

+1

我看不到任何明顯,將導致此突破,但是在調試這樣的問題,通過使用表格美化打印機的一般變得更加容易; [Serpent](https://github.com/pkulchenko/serpent)是獨立的,[Microlight](https://github.com/stevedonovan/Microlight#strings)和[Penlight](http:// stevedonovan .github.com/Penlight/api/modules/pl.pretty.html)都包含漂亮的漂亮打印機,並且位於LuaRocks上。 – furq 2012-08-01 18:03:45

+0

謝謝你,會檢查出來。我目前剛剛使用Sublime Text,編譯器告訴我爲調試(這不是最優的!)。 – kalligula 2012-08-02 11:20:18

+0

我試了一下,非常感謝。現在我可以真正閱讀我的表格包含的內容!非常感謝! – kalligula 2012-08-02 12:31:28

回答

0

在某些情況下,您將其稱爲Cell[i],在其他情況下爲grid[i] - 您確定您指的是同一張表嗎?

Cell:get_nav返回什麼?它返回值被放入self.Cell[i].nav所以它可能是多餘的,而且肯定是混亂到Cell:get_nav

+0

感謝您的回覆。我意識到我在那裏有一個錯字。網格[i]指的是實際的網格單元格。 Cell正在調用一個函數,它應該在grid [i] [4]上創建一個表格。我將self.nav返回到網格[i],但也許這是它的矯枉過正? – kalligula 2012-08-02 11:19:18

2

在你的循環,你填充網格也設置self.nav您使用此代碼:

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.nav = { 
    north = true, 
    east = false, 
    south = false, 
    west = false, 
} 

這是因爲Dog:jump(height)與Dog.jump(self,height)在Dog傳入自我的地方相同。

但是我相信你想要的是網格self.grid [i]中的每個索引都包含一個本身包含一個鍵'nav'和一個包含方向的表的表格。如果是這樣的話,改變細胞:get_nav函數返回像這樣的值:

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

這將方向的表分配成self.grid [I] .nav,其中如前它被分配一個零價值self.grid [我]。NAV因爲:

function edit_my_param(f) 
f = 3 
end 

nav = edit_my_param(4) 
print(nav) 

設定值NAV爲零,因爲該函數沒有返回值。

的問候,亨利