从表中删除条目

时间:2013-06-29 22:19:30

标签: arrays sdk lua corona lua-table

无法从表中删除条目。

这是我的代码

dropItem = dropList[ math.random( #dropList ) ]
dropSomething[brick.index] = crackSheet:grabSprite(dropItem, true)
dropSomething[brick.index].x = brick.x
dropSomething[brick.index].y = brick.y
dropSomething[brick.index].name = dropItem
dropSomething[brick.index].type = "dropppedItems"

碰撞

function bounce(event)
        local item = event.other
        if item.type == "dropppedItems" then
            if item.name == "bomb" then
                Lives = Lives - 1
                LivesNum.text = tostring(Lives)
            end
        item:removeSelf();
        end     

end

我尝试了什么:

item:removeSelf(); -- removes the whole table
item = nil -- seems to do nothing, the object continue 
           -- to move and i still see the image

我可以从屏幕上删除对象的唯一方法是将其隐藏起来 transition.to(item, {time = 100, alpha = 0})

2 个答案:

答案 0 :(得分:0)

项目对象应该是您实际项目的副本。意思是,它不像指针那样。因此,如果您想从表格中删除某个项目,则应该在表格中找到它。

您可以像这样修改代码:

dropItem = dropList[ math.random( #dropList ) ]
dropSomething[brick.index] = crackSheet:grabSprite(dropItem, true)
dropSomething[brick.index].x = brick.x
dropSomething[brick.index].y = brick.y
dropSomething[brick.index].name = dropItem
dropSomething[brick.index].type = "dropppedItems"
dropSomething[brick.index].id = brick.index

function bounce(event)
        local item = event.other
        if item.type == "dropppedItems" then
            if item.name == "bomb" then
                Lives = Lives - 1
                LivesNum.text = tostring(Lives)
            end
        dropSomething[item.id]:removeSelf();
        dropSomething[item.id] = nil
        end     
end

假设弹跳功能可以达到dropSomething表

答案 1 :(得分:0)

如果要从表中删除对象,则可以使用函数'table.remove()',该函数非常易于使用。

为此,您有两种 方式: 一种是使用自定义函数,另一种是不使用。

我建议使用自定义功能。

为此,您可以做类似的事情

    removeFromTable = function(tbl, lookfor)
       for i,v in pairs(tbl)do
          if(v.Name==lookfor)then -- change that to whatever you will use as a identification
             table.remove(tbl, i);
          end;
       end;
    end;

如果您在RBLX_Lua中,那会起作用。我不确定它是否可以在其他lua“版本”中使用。它需要您为表中的每个对象都有一个标识“标签”,您可能已经考虑到它看起来像是在制作带有物品的游戏。

希望有帮助。