Книга: Описание языка 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 полностью перекрывают по возможностям мультирисунки (они имеют состояния, задаваемые строковыми константами, а также автоматически анимируются по таймеру, причем, скорость анимации можно задавать индивидуально для каждого спрайта). Однако, спрайты немного сложнее создавать и, кроме того, они требуют достаточно больших ресурсов процессора при анимации.
- Модуль ABCObjects: обзор
- Диаграмма классов
- Класс ObjectABC
- Класс BoundedObjectABC
- Класс RectangleABC
- Класс SquareABC
- Класс EllipseABC
- Класс CircleABC
- Класс RoundRectABC
- Класс RoundSquareABC
- Класс TextABC
- Класс RegularPolygonABC
- Класс StarABC
- Класс PictureABC
- Класс MultiPictureABC
- Класс BoardABC
- Класс ObjectBoardABC
- Мультирисунки
- Массив всех графических объектов Objects
- Переменные, процедуры и функции модуля ABCObjects
- Ускорение перерисовки графических объектов
- Совмещение графического вывода модулей ABCObjects и GraphABC