我是Corona的新手。我正在做一个简单的TD游戏。我有墙壁(路障),玩家可以将其拖到战场上,然后敌人群体朝向目标目的地。如果他们遇到路障,他们就会把健康带走,直到它达到零,然后路障就会消失。
我杀死和移除路障的代码如下:
if (barricadeCount == 0) then
print ("No barricades left")
else
for i = 1, totalBarricades do
if (barricade[i].isAttacked == true) and (barricade[i].health == 0) then
print ("REMOOOOOVING BARRICADE", i)
local deadBarricade = table.remove(barricade,i)
deadBarricade:removeSelf()
deadBarricade = nil
totalBarricades = totalBarricades - 1 --one less in the 'total'!
end
if (barricade[i].isAttacked == true) and (barricade[i].health > 0) then
barricade[i].health = barricade[i].health - 10
--and change graphic to show damage
print ("barricade",i,"health is now",barricade[i].health)
end
end
totalBarricades = totalBarricades - 1
现在我遇到的问题是,当第一个路障'死'时,我会崩溃并且
'尝试索引字段'?' (零值)
我怀疑它与重新编号的路障阵列的内容有关,但我无法弄明白。如果有人能指出我在这里做错了什么,我会非常感激。
答案 0 :(得分:0)
不要在表中删除它,只是让它。只要您的设备可以承载负载,Lua表就可以处理不确定的值。只需要deadBarricade:removeSelf()
清除一些记忆。每次移除路障时,我都会从表中移动元素时出现滞后时间。如果同时移除大量街垒怎么办?我不知道它可能会出现什么错误,但我期待它。
答案 1 :(得分:0)
我认为当总路障数量变为零并且它试图在以下代码中对活着的路障进行检查时会发生错误。
if(barricade [i] .isAttacked == true)and(barricade [i] .health> 0)then
表格退出索引并弹出错误。 您可以添加额外的检查以确保您没有引用nil对象。
if (barricade[i] and barricade[i].isAttacked == true) and (barricade[i] and barricade[i].health > 0) then