Модераторы: Snowy, MetalFan, bems, Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> floating point invalid operation, Графика, перемещение объекта 
:(
    Опции темы
dimavit
Дата 11.8.2012, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 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
PM MAIL   Вверх
dimavit
Дата 12.8.2012, 09:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 3.8.2012

Репутация: нет
Всего: нет



Со второй проблемой, похоже, справиться удалось, а вот с первой - никак. Call Stack показывает ошибку здесь:
:0040493b @ROUND +$3. Что бы это могло значить?
PM MAIL   Вверх
Illusion Dolphin
Дата 12.8.2012, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1198
Регистрация: 3.5.2003

Репутация: 5
Всего: 63



И что же было во 2м случае не так? Может поделитесь?
По поводу 1го случая:
Меня смущает что 
Код

:0040493b @ROUND +$3

вместе с 
Код

// floating point invalid operation вот в этом месте программы:
Form1.PaintBox1.Canvas.Draw(X-3, Y-3, Bmp);

Как бы там round и нету. Значит надо выложить полный Call Stack и по пару строчек до и после Form1.PaintBox1.Canvas.Draw. Иначе это гадание на кофейной гуще (Ошибка в 17 строчке). 


--------------------
В мире всего две бесконечности: вселенная и человеческая глупость... На счёт вселенной я не уверен.
Шифрование и организация фотографий - Photo Database 4.5
PM MAIL WWW ICQ   Вверх
dimavit
Дата 15.8.2012, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 3.8.2012

Репутация: нет
Всего: нет



Цитата(Illusion Dolphin @ 12.8.2012,  09:52)
И что же было во 2м случае не так? Может поделитесь?
По поводу 1го случая:
Меня смущает что 
Код

:0040493b @ROUND +$3

вместе с 
Код

// floating point invalid operation вот в этом месте программы:
Form1.PaintBox1.Canvas.Draw(X-3, Y-3, Bmp);

Как бы там round и нету. Значит надо выложить полный Call Stack и по пару строчек до и после Form1.PaintBox1.Canvas.Draw. Иначе это гадание на кофейной гуще (Ошибка в 17 строчке).

И что же было во 2м случае не так? Может поделитесь?

Объект имеет следующий алгоритм перемещения: непосредственно перед перемещением объекта на том месте в котором он находится в настоящее время восстанавливается участок канвы, перекрываемый объектом. Этот участок был занесен в свойство BMP объекта во время предыдущего перемещения. Затем делается копирование участка канвы на который будет перемещен объект и заносится в его свойство BMP. После этого объект перерисовывается в новом месте. И так далее в цикле движения. Так вот при занесении скопированного участка в свойство BMP, объект, представляющий из себя это свойство каждый раз создавался заново. Т.е вместо того, чтобы создать его один раз при создании основного объекта, а потом просто обновлять, он создавался каждый раз при каждом новом шаге объекта. Учитывая, что самих объектов много, да еще на каждом шаге каждого объекта создавался новый объект их свойства BMP, очень скоро это количество становилось слишком большим.

Form1.PaintBox1.Canvas.Draw(X-3, Y-3, Bmp);

Как бы там round и нету.

Совершенно верно, round был на предыдущем шаге, а поскольку этот шаг был процедурой, да еще, использовавшей кучу разных условий, то это место ускользало от внимания. Вот там то иногда и возникало деление на 0 при случайном совпадении координат двух объектов.

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0566 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.