Lua从表中删除项(CoronaSDK)

我的问题是我有一个对象表格,它是这样添加的:

enemies[enemy_id] = enemy

现在当地图末尾发生碰撞时,我想将该敌人从表格中移除。我试过了这样的移除方式:

enemies[enemy_id] = nil

但是当到达最后一个敌人时,表格已经为空了,原因不明。假设有3个敌人在一个表格中,我打印出表格的数量。第一个移除后,剩下的是2,第二个移除后,剩下的是0。这没有意义。

那么,如何从表格中删除项目?我也尝试过使用table.remove,但是我需要使用相同的密钥,因为它们是敌人的ID。如果需要,我可以提供示例。

点赞
用户752976
用户752976

由于在稀疏数组上#无法使用,因此我的解决方法是使用0索引(或简单地使用另一个变量)作为计数器:

enemies[0] = 0

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

2013-07-12 20:50:34
用户1244588
用户1244588

当在 Lua 表中使用“稀疏键”时,以下模式通常会给我带来很多好处:

-- 将项目添加到注册表中
registry[object] = key
registry[key] = object

-- 遍历注册表中的所有项目
for k,v in pairs(registry) do
  if type(k) == "number" then do_something(k,v) end
end

-- 从注册表中删除键 K 对应的项目:
registry[registry[K]] = nil
registry[K] = nil

-- 从注册表中删除对象 O:
registry[registry[O]] = nil
registry[O] = nil
2013-07-12 21:09:01