删除从TObjectList元素时,列表索引越界

问题描述 投票:0回答:1

我有一个小,但恼人的问题,我的德尔福学校项目。在学校里,我们不得不使用Delphi 5(我知道,很现代),并能够在它的工作对我自己,而不会在大烦恼,我使用Delphi 7这里,而不是拉撒路。

我试图代码,我们得到了教我们的课程有限的OpenGL知识小太空侵略者项目,我检查子弹玩家射击和敌人之间碰撞时运行到这个问题。碰撞检测代码实际工作和计数相应命中,但是当它来删除列表中的敌人和子弹(这样他们将不再被渲染),列表索引越界的错误发生。

procedure TForm1.CheckCollision(enemies, bullets: TObjectList);
var ll, kk: integer;
begin
  for ll := Form1.bullets.Count-1 downto 0 do
  begin
      for kk := Form1.enemies.Count-1 downto 0 do
      begin
        if TBullet(Form1.bullets[ll]).tby1 >= TEnemy(Form1.enemies[kk]).tey1 then
        begin
          if TBullet(Form1.bullets[ll]).tbx2 > TEnemy(Form1.enemies[kk]).tex1 then
          begin
            if TBullet(Form1.bullets[ll]).tbx1 < TEnemy(Form1.enemies[kk]).tex1 + 0.05 then
              begin
                if TBullet(Form1.bullets[ll]).tby1 <= TEnemy(Form1.enemies[kk]).tey2 then
                begin
                  Form1.enemies.Delete(kk); //error happens here and line below
                  Form1.bullets.Delete(ll);
                  inc(score);
                end;
              end;
          end;
        end;
      end;
  end;
end;

这是发生此错误代码。我有点儿知道这是什么错误意思,但我不知道如何解决它在这种情况下。有趣的是,虽然在这个项目中的.exe文件这个错误仍然发生,无论是子弹,敌人被删除,你的分数获得提高,你只需要快速按下OK后,会出现错误信息,您可以继续播放。在Delphi中,程序明显错误后停止。

希望你们也许能帮助我在这里。

delphi delphi-7 tobjectlist
1个回答
2
投票

子弹[11]在第一KK环被删除。因此,在随后的KK循环,子弹[11]已不存在(即LL - 1是“最高”现有的指数)...

© www.soinside.com 2019 - 2024. All rights reserved.