2

尽管进行了很多搜索,但一直在努力解决这个问题并没有到达任何地方,所以如果有人可以提供帮助,那就太好了

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

enemies[enemy_id] = enemy

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

enemies[enemy_id] = nil

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

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

4

2 回答 2

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
于 2013-07-12T21:09:01.657 回答
1

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

enemies[0] = 0

然后,当你添加一个敌人时,增加计数器,当你移除一个敌人时,减少它。就那么简单。

于 2013-07-12T20:50:34.473 回答