我有点编码的初学者,我的英语不是很好,我希望我能够清楚地表达我的问题:
所以我的代码中有for
- 循环,其中有2 if
,每个if
,我看是否有真或假,如果是真的,我删除循环的一部分。那样:
for n=#Test,1, -1 do
if Test[n].delete == true then
table.remove(Test, n )
end
if Test[n].y > 0 then
table.remove(Test, n )
end
end
有点像这样,我的问题是,如果第一个if
使Test[n]
被删除,则游戏会在下一个if
崩溃,因为Test[n]
不会t再也存在了。我通过制作2 for
- 循环解决了这个问题,每个if
一个。
但是我看到有人在没有2 for
循环的情况下做了这个循环,它并没有崩溃,我试图找出错误但我找不到它。
如果有人能找到我写的内容有什么问题,我会感激不尽!
所以这是在我的代码中出现问题的时刻,在第9行,如果满足条件,我table.remove(ListeTirs, n )
,然后在第17行,当代码再次尝试找到它进行测试时,它就是bug :
for n=#ListeTirs,1, -1 do
if ListeTirs[n].Type == "Gentils"
then local nAliens
for nAliens=#ListeAliens,1,-1 do
if
Collide(ListeTirs[n], ListeAliens[nAliens]) == true
then
ListeTirs[n].Supprime = true
table.remove(ListeTirs, n )
ListeAliens[nAliens].Supprime = true
table.remove(ListeAliens, nAliens)
end
end
end
if
ListeTirs[n].y < 0 - ListeTirs[n].HauteurMoitie or ListeTirs[n].y > Hauteur + ListeTirs[n].HauteurMoitie or ListeTirs[n].x > Largeur + ListeTirs[n].LargeurMoitie or ListeTirs[n].x < 0 - ListeTirs[n].LargeurMoitie
then
ListeTirs[n].Supprime = true
table.remove(ListeTirs, n)
end
end
我希望很清楚,我可以发布整个代码,但我认为没有必要,如果是的话,我会添加它。
谢谢:)
答案 0 :(得分:-1)
for n=#Test,1, -1 do
local should_be_removed
-- just mark for deletion
if Test[n].delete = true then
should_be_removed = true
end
-- just mark for deletion
if Test[n].y > 0 then
should_be_removed = true
end
-- actually delete (at the very end of the loop body)
if should_be_removed then
table.remove(Test, n )
end
end