Описание языка «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 полностью перекрывают по возможностям мультирисунки (они имеют состояния, задаваемые строковыми константами, а также автоматически анимируются по таймеру, причем, скорость анимации можно задавать индивидуально для каждого спрайта). Однако, спрайты немного сложнее создавать и, кроме того, они требуют достаточно больших ресурсов процессора при анимации.