Описание языка PascalABC.NET - W Cat
Шрифт:
Интервал:
Закладка:
Следует обратить внимание, что в модуле GraphABC имеются родственные процедуры LockDrawing, UnLockDrawing, и Redraw. Однако, они отвечают за растровую перерисовку без мерцания, в то время как процедуры LockDrawingObjects, UnLockDrawingObjects, и RedrawObjects отвечают только за ускорение перерисовки векторной графики ABCObjects (отсутствие мерцания векторных объектов при их изменении обеспечивается автоматически).
Совмещение графического вывода модулей ABCObjects и GraphABC
Использование объектов ABCObjects можно совмещать с выводом в графическое окно с помощью процедур рисования модуля GraphABC. При этом, все объекты ABCObjects располагаются поверх изображения, нарисованного в графическом окне вызовом процедур рисования модуля GraphABC. Это можно использовать, например, для задания фоновой картинки, на которой затем можно размещать объекты ABCObjects:
FillWindow('aqua.jpg');
c := new CircleABC(100,100,50,clGreen);
RectangleABC(300,300,100,50,clBlue);
Следует иметь в виду, что прорисовка при изменении свойств объектов ABCObjects происходит корректно, но если рисовать вызовом процедур модуля GraphABC, то графические объекты ABCObjects будут затираться. Для восстановления картинки следует либо передвинуть объекты ABCObjects, либо вызвать процедуру RedrawObjects, перерисовывающую все графическое окно.
Модуль ABCSprites
Модуль ABCSprites реализует спрайты - анимационные объекты с автоматически меняющимися кадрами. Спрайт представляется классом SpriteABC и является разновидностью мультикартинки MultiPictureABC, однако, обладает двумя дополнительными возможностями:
1. Спрайты автоматически анимируются в цикле, что управляется специальным таймером. Можно регулировать скорость анимации каждого спрайта, а также останавливать/запускать все спрайты.
2. Спрайты могут иметь состояния, задаваемые строками. Каждое состояние имеет свой независимый набор кадров, меняющихся циклически. Например, игровой объект в состоянии Идти имеет три кадра, а в состоянии Сидеть - один кадр (в этом состоянии анимация отсутствует). Переключая состояния, можно моделировать различное поведение игрового объекта.
Кроме того, анимацию всех спрайтов можно выключить/включить вызовом следующих процедур:
procedure StartSprites;
Стартует анимацию всех спрайтов
procedure StopSprites;
Останавливает анимацию всех спрайтов
Класс SpriteABC
Класс SpriteABC является потомком класса MultiPictureABC и представляет графический объект Спрайт, автоматически анимирующий на экране последовательность рисунков. Спрайты также могут иметь несколько состояний, каждое из которых представляет собой анимацию рисунков.
Конструкторы класса SpriteABCconstructor Create(x,y: integer; fname: string);
Создает спрайт, загружая его из файла с именем fname. Имя fname может быть либо именем графического файла, либо именем информационного файла спрайта с расширением .spinf. Если имя является именем графического файла, то создается спрайт с одним кадром. Остальные кадры добавляются методом Add. После этого при необходимости добавляются состояния методом AddStates и вызывается метод CheckStates. Если файл имеет расширение .spinf, то он содержит информацию о кадрах и состояниях спрайта и должен сопровождаться соответствующим графическим файлом. После создания спрайт отображается на экране в позиции (x,y)
constructor Create(x,y,w: integer; fname: string);
Создает спрайт, загружая его из файла fname. Файл должен хранить рисунок, представляющий собой последовательность кадров одного размера, расположенных по горизонтали. Каждый кадр считается имеющим ширину w. Если ширина рисунка в файле fname не кратна w, то возникает исключение. После этого при необходимости добавляются состояния методом AddStates и вызывается метод CheckStates После создания спрайт отображается на экране в позиции (x,y)
constructor Create(x,y,w: integer; p: Picture);
Создает спрайт, загружая его из объекта p: Picture. Он должен хранить рисунок, представляющий собой последовательность кадров одного размера, расположенных по горизонтали. Каждый кадр считается имеющим ширину w. Если ширина рисунка не кратна w, то возникает исключение. После этого при необходимости добавляются состояния методом AddStates и вызывается метод CheckStates. После создания спрайт отображается на экране в позиции (x,y)
constructor Create(g: SpriteABC);
Создает спрайт - копию спрайта g
Свойства класса SpriteABCproperty StateName: string;
Имя состояния
property State: integer;
Номер состояния (от 1 до StateCount)
property StateCount: integer;
Количество состояний. Свойство доступно только на чтение
property Speed: integer;
Скорость спрайта (1..10)
property Active: boolean;
Активность спрайта: True, если спрайт активен (т.е. происходит его анимация), и False в противном случае
property Frame: integer;
Текущий кадр в текущем состоянии
Методы класса SpriteABCprocedure AddState(name: string; count: integer);
Добавляет состояние к спрайту. После добавления всех состояний следует вызвать CheckStates
procedure CheckStates;
Проверяет корректность набора состояний. Вызывается после добавления всех состояний
procedure SaveWithInfo(fname: string);
Сохраняет графический и информационный файлы спрайта. Имя fname задает имя графического файла. Информационный файл сохраняется в тот же каталог, что и графический, имеет то же имя и расширение .spinf
procedure NextFrame;
Переходит к следующему кадру в текущем состоянии
procedure NextTick;
Переходит к следующему тику таймера; если он равен ticks, то он сбрасывается в 1 и вызывается NextFrame
function FrameCount: integer;
Возвращает количество кадров в текущем состоянии
function FrameBeg: integer;
Возвращает начальный кадр в текущем состоянии
function Clone: SpriteABC;
Возвращает клон объекта
Свойства, унаследованные от класса MultiPictureABCproperty CurrentPicture: integer;
Номер текущего рисунка
property Count: integer;
Количество рисунков в наборе
Методы, унаследованные от класса MultiPictureABCprocedure Add(fname: string);
Добавляет рисунок к спрайту, загружая его из файла fname. Рисунок должен иметь те же размеры, что и все рисунки из набора
procedure ChangePicture(fname: string);
Меняет набор рисунков на набор, состоящий из одного рисунка, загружая его из файла с именем fname
procedure ChangePicture(w: integer; fname: string);
Меняет набор рисунков на набор, загружая его из файла с именем fname. Файл должен хранить последовательность изображений одного размера, расположенных по горизонтали. Каждое изображение считается имеющим ширину w
procedure NextPicture;
Циклически переходит к следующему рисунку из набора
procedure PrevPicture;
Циклически переходит к предыдующему рисунку из набора
function Clone: MultiPictureABC;
Возвращает клон набора рисунков
Свойства, унаследованные от класса ObjectABCproperty Left: integer;
Отступ графического объекта от левого края
property Top: integer;
Отступ графического объекта от верхнего края
property Width: integer;
Ширина графического объекта
property Height: integer;
Высота графического объекта
property dx: integer;
x-координата вектора перемещения объекта при вызове метода Move. По умолчанию установлено в 0. Для неподвижных объектов может быть использовано для хранения любой дополнительной информации, связанной с объектом
property dy: integer;
y-координата вектора перемещения объекта при вызове метода Move. По умолчанию установлено в 0. Для неподвижных объектов может быть использовано для хранения любой дополнительной информации, связанной с объектом
property Center: Point;
Центр графического объекта
property Position: Point;
Левый верхний угол графического объекта
property Visible: boolean;
Видим ли графический объект
property Color: GColor;
Цвет графического объекта
property FontColor: GColor;
Цвет шрифта графического объекта
property Text: string;
Текст внутри графического объекта
property TextVisible: boolean;
Видимость текста внутри графического объекта