PascalABC.NET

Мультирисунки

Мультирисунок представляет собой объект класса 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');

Третий параметр здесь указывает ширину одного кадра.

Следует еще раз отметить, что спрайты SpriteABC полностью перекрывают по возможностям мультирисунки (они имеют состояния, задаваемые строковыми константами, а также автоматически анимируются по таймеру, причем, скорость анимации можно задавать индивидуально для каждого спрайта). Однако, спрайты немного сложнее создавать и, кроме того, они требуют достаточно больших ресурсов процессора при анимации.