У меня небольшая, но раздражающая проблема с моим проектом Delphi School.В школе мы должны использовать Delphi 5 (я знаю, очень современно) и чтобы иметь возможность работать над ним самостоятельно, не сталкиваясь с большими неприятностями, я использую Delphi 7 здесь вместо Lazarus.
Я пытаюсьчтобы кодировать небольшой проект Space Invaders с ограниченными знаниями 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 программа останавливается после ошибки, очевидно.
Надеюсь, что вы, ребята, могли бы помочь мне здесь.