使用löve2D在lua中循环,删除变量

时间:2016-12-17 18:16:34

标签: for-loop lua love2d

我有点编码的初学者,我的英语不是很好,我希望我能够清楚地表达我的问题:

所以我的代码中有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

我希望很清楚,我可以发布整个代码,但我认为没有必要,如果是的话,我会添加它。

谢谢:)

1 个答案:

答案 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