【问题标题】:Lua deleting an item from table (CoronaSDK)Lua从表中删除一个项目(CoronaSDK)
【发布时间】:2013-07-11 11:15:20
【问题描述】:

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

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

enemies[enemy_id] = enemy

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

enemies[enemy_id] = nil

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

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

【问题讨论】:

  • 不要在稀疏表上使用#t(当索引有间隙时),它会返回错误的结果。
  • @Luke 不确定“... 我需要键入相同的键”是什么意思。

标签: lua coronasdk


【解决方案1】:

在 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

【讨论】:

    【解决方案2】:

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

    enemies[0] = 0
    

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

    【讨论】:

      猜你喜欢
      • 2021-11-23
      • 2020-08-28
      • 2021-01-30
      • 1970-01-01
      • 2015-04-02
      • 2011-02-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多