Свойство Canvas и класс TCanvas. Алгоритм простейшей анимации
Многие объекты имеют свойство Canvas (холст, канва), которое используется для рисования различных линий: эллипсов, прямоугольников и т.п. - на поверхности соответствующего объекта, для задания свойств фона и для вывода текста. Свойство Canvas относится к классу TCanvas, поэтому нужно в справочной системе Делфи рассмотреть (кратко) этот класс.
Основые методы класса TCanvas:
- procedure MoveTo(X, Y: Integer); - перо ставится на точку с коорд. X, Y (необходимо перед началом рисования некоторых линий, например, отрезка прямой - см LineTo)
- procedure LineTo(X, Y: Integer); - проводится отрезок прямой в точку с коорд. X, Y (см MoveTo)
- procedure Ellipse(X1, Y1, X2, Y2: Integer); overload; Эллипс. X1, Y1, X2, Y2 - координаты
левого верхнего и правого нижнего углов описанного прямоугольника. или:
procedure Ellipse(const Rect: TRect); overload; Rect - прямоугольник (описанный). overload - перегрузка метода, т е метод может использоваться с любым из этих 2-х вариантов параметров.
- procedure FillRect(const Rect: TRect); - заполняет (заливает фоном) прямоугольник Rect. Свойства фона нужно задать, используя Canvas.Brush (см свойства, Brush)
- procedure Arc(X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer); - дуга эллипса.
- procedure FloodFill(X, Y: Integer; Color: TColor; FillStyle: TFillStyle); - заливка замкнутой фигуры
type TFillStyle = (fsSurface, fsBorder); - если FillStyle= fsSurface, то Color - цвет заливаемой фигуры,
если FillStyle= fsBorder, то Color - цвет границы.
- procedure PolyBezier(const Points: array of TPoint); - нарисовать сплайн-аппроксимацию, проходящую через точки, заданные массивом Points.
- procedure Rectangle(X1, Y1, X2, Y2: Integer); overload; - параметры определяют прямоугольник (см Ellipse)
procedure Rectangle(const Rect: TRect); overload;
- procedure RoundRect(X1, Y1, X2, Y2, X3, Y3: Integer); - прямоугольник, углы скруглены.
- procedure TextOut(X, Y: Integer; const Text: string); - выводит текст. X, Y - коорд верхнего левого угла прямоугольника, охватывающего текст.
Для настройки параметров линии, используемой для рисования этих фигур требуется св-во Canvas.Pen. Рассмотрим основные св-ва класса TPen:
- property Color: TColor;
- property Style: TPenStyle;
type TPenStyle = (psSolid, psDash, psDot, psDashDot, psDashDotDot, psClear); - сплошная, пунктир и т д.
- property Width: Integer; - толщина линии.
Основые свойства класса TCanvas:
- property Brush: TBrush; - (кисть). - Определяет цвет и тип заполнения для заполнения замкнутых фигур . Далее - см свойства класса TBrush.
- property Font: TFont; - задает свойства шрифта, используемого методом TextOut (см выше).
- property Pen: TPen; - "перо", которым пользуются методы класса TCanvas для рисования линий. Позволяет задать свойства линий. Класс TPen описан выше.
- property Pixels[X, Y: Integer]: TColor; - Используя это св-во, Вы можете задать цвет каждого пиксела (пиксел задается координатами X, Y, начало отсчета - верхний левый угол владельца).
Вы можете увидеть примеры использования Canvas в программах: Игра ТИР (заполнение фона формы картинкой из файла),
Наш первый Делфи-проект (Рисование графика функции) ,
Анимированная схема технологического процесса
Алгоритм простейшей анимации
Простейшая анимация - это просто движение неизменной фигуры (рисунка) относительно некоторого фона.
При помощи свойств и методов класса TCanvas простейшую анимацию можно сделать так:
- Нарисовать где-либо эту фигуру. Пусть координаты охватывающего (описанного) прямоугольника суть
X,Y.
- Выдержать некоторую паузу (можно использовать процедуру sleep(time - msec)) чтобы глаз успел
воспринять фигуру (например, 50 мсек).
- Стереть фигуру (для этого можно ее повторно нарисовать в том же месте цветом фона или использовать
метод FillRect - по Вашему выбору)
- Изменить координаты для рисования на небольшую величину (шаг)
- Нарисовать фигуру в новом месте
- Повторять пункты 1 - 5, пока фигура не приедет в конечную позицию.
Можно сделать анимацию проще, если двигать (менять координаты) объекта Image, который содержит картинку.
В этом случае не нужно заботиться о стирании и рисовании. Нужно просто изменить координату, сделать паузу и т д. Например, можно переделать проект ТИР (заменить присвоение случайных чисел в качестве координат - числами, которые меняются плавно, описывая траекторию движения).
Реклама от TUT.SU »