尽管有很多搜索工作,但是一直试图解决这个问题几个小时并没有到达任何地方,所以如果有人可以提供帮助那就太棒了
我的问题是我有一个像这样添加的对象表
enemies[enemy_id] = enemy
现在当地图末尾发生碰撞时,我想从桌子上移除那个敌人。我试过删除
enemies[enemy_id] = nil
但当它到达最后一个敌人时,由于某种原因,桌子已经是空的。假设表中有3个敌人,我打印表的计数。第一个被删除它显示2左,第二个被删除它显示0左。没有意义
那么如何从表中删除项目?我也试过table.remove但我需要键入相同的键,因为它们是敌人的id。如果需要,我可以发布一个例子
答案 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
然后,当你添加敌人时,增加计数器,当你删除它时,减少它。就这么简单。