从数组中移除一个“无效”的元素

我刚接触 Corona,正在制作一个简单的塔防游戏。我有一些墙(路障),玩家可以将它们拖到战场上,然后敌人会朝着目标前进。如果敌人遇到一堵墙,它们会将其耐久度减少直到为零,然后这堵墙就消失了。

我删除并移除墙壁的代码如下:

if (barricadeCount == 0) then
    print ("没有墙壁了")
else
    for i = 1, totalBarricades do
            if (barricade[i].isAttacked == true) and (barricade[i].health == 0) then
                print ("正在移除墙壁", i)
                local deadBarricade = table.remove(barricade,i)
                deadBarricade:removeSelf()
                deadBarricade = nil
                totalBarricades = totalBarricades - 1 --总数减1!
            end
            if (barricade[i].isAttacked == true) and (barricade[i].health > 0) then
                barricade[i].health = barricade[i].health - 10
                --并更改图形以显示伤害
                print ("墙壁",i,"的耐久度现在是",barricade[i].health)
            end
    end
totalBarricades = totalBarricades - 1

我现在遇到的问题是当第一面墙“死”时,程序会崩溃并显示错误信息“尝试对字段'?'(空值)进行索引”。我怀疑这与数组中墙壁的重新编号有关,但我无法找到原因。如果有人能指出我的错误,我将不胜感激。

点赞
用户3803880
用户3803880
在表中不要删除它,只要让它保持原样。只要您的设备能够承载负载,Lua表就可以处理不定值。只需使用`deadBarricade:removeSelf()`清除一些内存即可。每次删除路障时,您将从表中移动元素时,我预期会有一些延迟时间。如果同时删除了许多路障,那会怎么样呢?我不知道它可能会出现什么错误,但我正在预期它。
2014-11-18 01:38:56
用户2260388
用户2260388

我认为错误是在总路障数归零时发生的,然后在以下代码中尝试对存活的路障进行检查。

if (barricade[i].isAttacked == true) and (barricade[i].health > 0) then

该表格由于超出索引而出现错误。

你可以添加额外的检查,以确保不引用空对象。

if (barricade[i] and barricade[i].isAttacked == true) and (barricade[i] and barricade[i].health > 0) then
2014-11-27 21:57:06