Імітація руху об'єкта (точка радіусом 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);
Мене бентежить що
Як би там round і немає. Значить треба викласти повний Call Stack і по пару рядків до і після Form1.PaintBox1.Canvas.Draw. Інакше це ворожіння на кавовій гущі (Помилка в 17 рядку).
І що ж було у 2м разі не так? Може поділитеся?
Form1.PaintBox1.Canvas.Draw (X-3, Y-3, Bmp);
Як би там round і немає.
Абсолютно вірно, round був на попередньому кроці, а оскільки цей крок був процедурою, та ще, яка використала купу різних умов, то це місце випадало від уваги. Ось там то іноді і виникало поділ на 0 при випадковому збігу координат двох об'єктів.