我有一个小,但恼人的问题,我的德尔福学校项目。在学校里,我们不得不使用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中,程序明显错误后停止。
希望你们也许能帮助我在这里。
子弹[11]在第一KK环被删除。因此,在随后的KK循环,子弹[11]已不存在(即LL - 1是“最高”现有的指数)...