![]() |
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]() ![]() ![]() |
|
dimavit |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 3.8.2012 Репутация: нет Всего: нет |
Имитация движения объекта (точка радиусом 3 пиксела) производится следующим образом: пересчитываются его координаты, на месте его текущего положения перерисовывается фон, сохраненный ранее в его свойстве Bmp, объект отрисовывается в точке с новыми координатами.
Однако, при этом иногда возникает ошибка: floating point invalid operation вот в этом месте программы: Form1.PaintBox1.Canvas.Draw(X-3, Y-3, Bmp); //восстанавливаем фон, извлекая его из свойства Bmp и помещая в текущее месторасположение объекта С чем может быть связана данная ошибка (повторюсь, что возникает она не всегда)? Необходимо отметить, что количество объектов, которые отрисовываются, увеличивается за счет создания все новых объектов в цикле. И кроме вышеуказанной ошибки возникает также и другая (а именно project raised exception class EOutOfResources with message 'Out of system resources') в момент отрисовки объекта: Form1.PaintBox1.Canvas.Pen.Color := clRed; Form1.PaintBox1.Canvas.Brush.Color: =clRed; Form1.PaintBox1.Canvas.Ellipse(X-3, Y-3, X+3, Y+3); Это сообщение отредактировал(а) dimavit - 11.8.2012, 11:14 |
|||
|
||||
dimavit |
|
|||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 3.8.2012 Репутация: нет Всего: нет |
Со второй проблемой, похоже, справиться удалось, а вот с первой - никак. Call Stack показывает ошибку здесь:
:0040493b @ROUND +$3. Что бы это могло значить? |
|||
|
||||
Illusion Dolphin |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1198 Регистрация: 3.5.2003 Репутация: 5 Всего: 63 |
И что же было во 2м случае не так? Может поделитесь?
По поводу 1го случая: Меня смущает что
вместе с
Как бы там round и нету. Значит надо выложить полный Call Stack и по пару строчек до и после Form1.PaintBox1.Canvas.Draw. Иначе это гадание на кофейной гуще (Ошибка в 17 строчке). -------------------- В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен. Шифрование и организация фотографий - Photo Database 4.5 |
||||
|
|||||
dimavit |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 3.8.2012 Репутация: нет Всего: нет |
И что же было во 2м случае не так? Может поделитесь? Объект имеет следующий алгоритм перемещения: непосредственно перед перемещением объекта на том месте в котором он находится в настоящее время восстанавливается участок канвы, перекрываемый объектом. Этот участок был занесен в свойство BMP объекта во время предыдущего перемещения. Затем делается копирование участка канвы на который будет перемещен объект и заносится в его свойство BMP. После этого объект перерисовывается в новом месте. И так далее в цикле движения. Так вот при занесении скопированного участка в свойство BMP, объект, представляющий из себя это свойство каждый раз создавался заново. Т.е вместо того, чтобы создать его один раз при создании основного объекта, а потом просто обновлять, он создавался каждый раз при каждом новом шаге объекта. Учитывая, что самих объектов много, да еще на каждом шаге каждого объекта создавался новый объект их свойства BMP, очень скоро это количество становилось слишком большим. Form1.PaintBox1.Canvas.Draw(X-3, Y-3, Bmp); Как бы там round и нету. Совершенно верно, round был на предыдущем шаге, а поскольку этот шаг был процедурой, да еще, использовавшей кучу разных условий, то это место ускользало от внимания. Вот там то иногда и возникало деление на 0 при случайном совпадении координат двух объектов. |
||||||
|
|||||||
![]() ![]() ![]() |
Правила форума "Delphi: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |