|
Вопрос # 2 662/ вопрос открыт / |
|
Здравствуйте! У меня возникла проблема с реализацией одной программы "молекулами". Постоянно выдает ошибку связанную с памятью,а исправить не как не могу.
программа должна работать так:нажимаем на пуск и начинают двигаться 30 шейпов с рандомной скоростью,при соприкосновении друг с другом и стенок "сосуда" отталкиваться на v_x:=-V_x,v_у:=-V_у.Компоненты создавать я не хотел,а только присвоить к массиву шейпы.
В программе
shape:array[1..3] of TShape-массив шейпов
a,V,V_x,V_y-скорость перемещения по горизонтали и вертикали
Когда с одним шейпом делал все получалось,а тут:mad:
Понять свою ошибку тоже не могу, объясните кто может? И если не трудно подскажите поподробнее как сделать?
x,y-новые координаты.
К вопросу прикреплён файл. Загрузить » (срок хранения: 60 дней с момента отправки вопроса)
 |
Вопрос задал: Casper_gold (статус: Посетитель)
Вопрос отправлен: 19 апреля 2009, 20:17
Состояние вопроса: открыт, ответов: 1.
|
Ответ #1. Отвечает эксперт: Quark
Здравствуйте, Casper_gold!
у вас объявлен массив
shape:array[1..3] of TShape;
А где заполнение массива данными? Обращение к не инициализированному массиву - вот и ошибка памяти.
Сделал небольшой пример.
В прикрепленной процедуре использован ваш модуль, переменные FindShape:TShape и shape:array[1..3] of TShape; - глобальные.
Ставь этот цикл например при загрузке формы (событие onCreate) - и всё! :)
Проверил - работает. Но появляется проблема - шейпы объединяются вместе и улетают за край формы, так что решите и эту проблему :) Причина - в инициализации переменных при нажатии кнопки. Шейпы будут налагаться друг на друга.
Не корректно высказывание - "Компоненты создавать я не хотел,а только присвоить к массиву шейпы. " Либо вы используете компонент TShape из палитры компонентов, либо создаёте его как объект вручную, с прописыванием всех параметров. Второй вариант - для мазохиста в данном случае :)
Совет - не ленитесь пользоваться отладчиком и брекпойнтами - сразу ясно - где глюк.... И учите объектно-ориентированное программирование ;)
Приложение: Переключить в обычный режим- procedure TForm1.FormCreate(Sender: TObject);
- var
- i : integer;
- begin
- for i := 1 to 3 do
- begin
- FindShape:=FindComponent('Shape'+inttostr(i));
- shape[i] := FindShape as TShape;
- end;
- end;
 |
Ответ отправил: Quark (статус: 1-ый класс)
Время отправки: 19 апреля 2009, 21:49
Оценка за ответ: 5
Комментарий к оценке: спасибо большое! Да я не ленюсь,я просто только учусь не очень понимаю как отладчик и брекпойнт работает. Еще раз спасибо!
|
Мини-форум вопроса
Мини-форум пуст.
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|