2013-04-07 80 views
0

我已經搜索了很多,並且找不到解決方案。任何幫助,你可以提供將不勝感激。Corona SDK(LUA) - 插入表格時遇到問題

-- The array compiled of enemies only allowed in the current 
-- level phase 
local EnemyList = {} 
-- Counter to determine the next spot in the EnemyList 
-- array to insert into 
local counter = 1 

for i=1,#Enemies do 
    if Enemies[i].phase == 0 or Enemies[i].phase == which_phase then 
     EnemyList[counter].src  = Enemies[i].src 
     EnemyList[counter].exp  = Enemies[i].exp 
     counter      = counter + 1 
    end 
end 

我得到約試圖索引nil值,在參考EnemyList表/陣列的錯誤。我試圖完成的是我試圖編譯一個只允許有敵人的新數組。我想我不確定如何在EnemyList表中插入一個新行。我嘗試使用table.insert,但值參數是必需的,我不知道如何做到這一點,因爲我將多個值存儲到EnemyList陣列中。

任何幫助或洞察正確的方式來插入一個新的行到一個空的表/數組將不勝感激。謝謝!

編輯: 我得到了一個工作解決方案,但我想我應該在這裏更新代碼,如果任何人在未來發現它。

-- The array compiled of enemies only allowed in the current 
-- level phase 
local EnemyList = {} 

for i=1,#Enemies do 
    if Enemies[i].phase == 0 or Enemies[i].phase == which_phase then 
     table.insert(EnemyList, { src = Enemies[i].src, exp = Enemies[i].exp }) 
    end 
end 

回答

2

您可以在Lua中的表格中存儲表格。表格有兩種索引方式:首先,索引號。這是table.insert使用的;它會在下一個索引號處添加一個條目。

第二種方式是按鍵;例如

> t = {} 
> t.test = {} 
> =t.test 
table: 0077D320 

您可以在表格中插入表格;這就是你如何創建一個2D表格。由於您定義表格的方式,type(EnemyList[counter]) = table

您可以通過運行table.insert(table, value)將新條目插入表中。這會將value分配給下一個可用的數字條目。 type(value)也可以是table;這是你如何在Lua中創建「多維數組」。

順便說一句,代替使用for i=1,#Enemies我建議使用for i,v in ipairs(Enemies)。第二個將迭代Enemies表中的所有數字條目。

+0

我非常感謝您的回覆,但我無法完全理解如何在我的情況下實施它。有沒有可能給我一個關於table.insert()代碼相對於我的例子看起來像什麼的例子?我會自己動手,但如果你能提供進一步的指導,我會非常感激。 – 2013-04-07 18:44:46

+0

所以我結束了修補,並得到它的工作,你建議的方式: table.insert(EnemyList,{SRC =敵人[I]的.src,EXP =敵人[I] .EXP}) – 2013-04-07 18:48:28

+0

@JoshWa真棒!如果您想進一步閱讀,我建議仔細閱讀[this](http://lua-users.org/wiki/TablesTutorial)。 – Zyerah 2013-04-07 18:49:33