![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Вылет из-за неправильного удаления из TList. [D7]
Б © (2009-01-15 16:13:00)
Constructor ПУЛИ:
BulletList.Add(Self); // Добавляем пулю в список.
Destructor ПУЛИ: // Удаляем пулю из списка.
BulletList.Remove(Self);
inherited;
OnTimer ГЛОБАЛЬНОГО ТАЙМЕРА:
Var i: word;
begin
If BulletList.Count > 0 then
For i:= 0 to BulletList.Count - 1 do
TBullet(BulletList[i]).Move;
При нажатии на кнопку создаётся пуля.
В процедуре движения пуля уничтожается в случае выхода за пределы формы.
ВОПРОС: При уничтожении пули, программ сразу же вылетает.
Юрий Зотов (2009-01-15 16:27:00) [21]> Б (15.01.09 16:23) [4]
> Если её убрать, программа мигом вылетает.
Такого быть не должно, потому что если BulletList.Count = 0, то цикл просто ни разу не выполнится и больше ничего не произойдет.
А если такое все же есть, то это значит, что программа содержит ошибку. Очень советую эту строчку все же убрать, а ошибку найти и устранить.
Медвежонок Пятачок (2009-01-15 16:25:00) [22]ну вот и ответ на вопрос
Б (2009-01-15 16:25:00) [23]> А ты её внутри Bullet.Move убить пытаешься?
Там находится функция, определяющая вышла ли Пуля за пределы формы.
Если Да (True), то она уничтожается.
Медвежонок Пятачок (2009-01-15 16:25:00) [24]В процедуре движения пуля уничтожается в случае выхода за пределы формы.
Б (2009-01-15 16:23:00) [25]2 Юрий Зотов
Большое Вам спасибо!
Не думал, что из-за цикла так происходит.
> 1. If BulletList.Count > 0 then - эту строку надо просто выкинуть.
Если её убрать, программа мигом вылетает.
Ega23 (2009-01-15 16:20:00) [26]А ты её внутри Bullet.Move убить пытаешься?
Юрий Зотов (2009-01-15 16:18:00) [27]> Б
1. If BulletList.Count > 0 then - эту строку надо просто выкинуть.
2. For i := BulletList.Count - 1 downto 0 do
TBullet(BulletList[i]).Move;
Б (2009-01-15 16:15:00) [28]Начало ---> http://www.delphimaster.ru/cgi-bin/forum.pl?id=1231532495&n=18