2013-07-12 34 views
2

項目一直在努力工作,這一點幾個小時,儘管許多搜索的沒有在任何地方獲得,因此,如果有人能夠幫助這將是巨大Lua中刪除從表(CoronaSDK)

我的問題是我有一個表這樣添加的對象

enemies[enemy_id] = enemy 

現在,當地圖末尾有碰撞時,我想從表格中移除敵人。我試圖通過刪除

enemies[enemy_id] = nil 

但是,當它到達最後一個敵人的表已經是空的出於某種原因。說一張桌子裏有3個敵人,我打印桌子的數量。第一個是刪除它顯示2左,第二個是刪除它顯示0左。沒有意義

那麼你如何從表中刪除一個項目?我也試過table.remove,但我需要鍵入相同的鍵,因爲它們是敵人的ID。我可以張貼一個例子,如果需要的話

+2

不要使用'稀疏表#t'(當指數有差距),它會返回錯誤的結果。 –

+0

@Luke不確定你的意思是「... *我需要鍵入相同的鍵*」。 – greatwolf

回答

1

由於#將無法​​在稀疏陣列工作,其他的建議,和我的解決辦法是使用0指數(或只是另一個變量)作爲計數:

enemies[0] = 0 

然後,當你添加一個敵人時,增加計數器,當你移除一個敵人時,減少它。就那麼簡單。

2

當在Lua表「疏鍵」這種模式通常不負有​​心人爲我工作:

-- add item to registry 
registry[object] = key 
registry[key] = object 

-- iterate over all items in registry 
for k,v in pairs(registry) do 
    if type(k) == "number" then do_something(k,v) end 
end 

-- remove item with key K from registry: 
registry[registry[K]] = nil 
registry[K] = nil 

-- remove item O from registry: 
registry[registry[O]] = nil 
registry[O] = nil