首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Lua从表中删除项目(CoronaSDK)

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

Stack Overflow用户
提问于 2013-07-13 03:48:12
回答 2查看 690关注 0票数 2

我已经试着解决这个问题几个小时了,尽管找了很多,但什么也没找到,所以如果有人能帮上忙那就太好了

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

代码语言:javascript
运行
复制
enemies[enemy_id] = enemy

现在,当地图末尾发生碰撞时,我想要从表中删除那个敌人。我尝试通过以下方式删除

代码语言:javascript
运行
复制
enemies[enemy_id] = nil

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

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

EN

回答 2

Stack Overflow用户

发布于 2013-07-13 05:09:02

当在Lua表中使用“稀疏键”时,这个模式通常会给我带来回报:

代码语言:javascript
运行
复制
-- 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
EN

Stack Overflow用户

发布于 2013-07-13 04:50:34

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

代码语言:javascript
运行
复制
enemies[0] = 0

然后,当你增加一个敌人时,增加指示物,当你移除一个敌人时,减少它。就这么简单。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17622924

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档