procedure MoveTo(x,y: integer); Перемещает левый верхний угол графического объекта к точке (x, y) |
procedure MoveOn(a,b: integer); Перемещает графический объект на вектор (a, b) |
procedure Move; override; Перемещает графический объект на вектор, задаваемый свойствами dx, dy |
procedure Scale(f: real); override; Масштабирует графический объект в f раз (f>1 - увеличение, 0 |
procedure ToFront; Переносит графический объект на передний план |
procedure ToBack; Переносит графический объект на задний план |
function Bounds: System.Drawing.Rectangle; Возвращает прямоугольник, определяющий границы графического объекта |
function PtInside(x,y: integer): boolean; override; Возвращает True, если точка (x, y) находится внутри графического объекта, и False в противном случае |
function Intersect(g: ObjectABC): boolean; Возвращает True, если изображение данного графического объекта пересекается с изображением графического объекта g, и False в противном случае. Белый цвет считается прозрачным и не принадлежащим объекту |
function IntersectRect(r: System.Drawing.Rectangle): boolean; Возвращает True, если прямоугольник графического объекта пересекается прямоугольником r, и False в противном случае |
function Clone0: ObjectABC; override; Возвращает клон графического объекта |
procedure Draw(x,y: integer; g: Graphics); override; Защищенная. Не вызывается явно. Переопределяется для каждого графического класса. Рисует объект на объекте g: Graphics |
destructor Destroy; Уничтожает графический объект |
Мультирисунки
Мультирисунок представляет собой объект класса MultiPictureABC и содержит несколько картинок одинакового размера (кадры мультирисунка), одна из которых отображается на экране.
Мультирисунки удобно использовать для графических объектов, имеющих несколько состояний. Например, для игрового объекта в мультирисунке хранятся все его повороты: вверх, вниз, вправо, влево. Мультирисунки удобно использовать также для создания спрайтов - анимационных рисунков с автоматически меняющимися кадрами. Однако, для спрайтов предназначен специальный класс SpriteABC, расположенный в модуле ABCSprites.
Рассмотрим создание мультирисунка из четырех рисунков, каждый из которых находится в отдельном файле:
uses ABCObjects,GraphABC;
var p: MultiPictureABC;
begin
p := new MultiPictureABC(50,50,'multi1.bmp');
p.Add('multi2.bmp');
p.Add('multi3.bmp');
p.Add('multi2.bmp');
end.
После запуска программы в графическом окне отображается рисунок из первого кадра.
Для смены рисунка достаточно изменить свойство CurrentPicture:
p.CurrentPicture := 2;
Можно также циклически перейти к следующему рисунку:
p.NextPicture;
или к предыдущему рисунку:
p.PrevPicture;
Нетрудно организовать анимацию, состоящую в последовательной циклической смене рисунков:
while True do
begin
p.NextPicture;
Sleep(100);
end;
Мультирисунок после создания хранится не в виде последовательности отдельных рисунков, а в виде одного длинного рисунка, в котором все кадры-рисунки расположены последовательно по горизонтали. Такой длинный рисунок можно сохранить в файл для последующего использования:
p.Save('multipic.gif');
После этого мультирисунок можно создавать непосредственно из файла с длинным рисунком, указывая в качестве дополнительного параметра ширину одного кадра:
p := new MultiPictureABC(50,50,100,'multipic.gif');