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