Lua从表格中删除项目(CoronaSDK)

时间:2013-07-12 19:48:12

标签: lua corona

尽管有很多搜索工作,但是一直试图解决这个问题几个小时并没有到达任何地方,所以如果有人可以提供帮助那就太棒了

我的问题是我有一个像这样添加的对象表

enemies[enemy_id] = enemy

现在当地图末尾发生碰撞时,我想从桌子上移除那个敌人。我试过删除

enemies[enemy_id] = nil

但当它到达最后一个敌人时,由于某种原因,桌子已经是空的。假设表中有3个敌人,我打印表的计数。第一个被删除它显示2左,第二个被删除它显示0左。没有意义

那么如何从表中删除项目?我也试过table.remove但我需要键入相同的键,因为它们是敌人的id。如果需要,我可以发布一个例子

2 个答案:

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

答案 1 :(得分:1)

由于#对稀疏数组不起作用,正如其他建议的那样,我的解决方案是使用0索引(或简称另一个变量)作为计数:

enemies[0] = 0

然后,当你添加敌人时,增加计数器,当你删除它时,减少它。就这么简单。